# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

段子手168

1、微服务的注册中心

注册中心可以说是微服务架构中的"通讯录",它记录了服务和服务地址的映射关系。

在分布式架构中服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。

2、注册中心的主要作用

服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:

1)服务发现:

服务注册/反注册:保存服务提供者和服务调用者信息。

服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能。

服务路由(可选):具有筛选整合服务提供者的能力。

2)服务配置:

配置订阅:服务提供者和服务调用者订阅微服务相关的配置。

配置下发:主动将配置推送给服务提供者和服务调用者。

3)服务健康检测:

检测服务提供者的健康情况。

3、常见的注册中心:Zookeeper, Eureka, Consul, Nacos。

1)Zookeeper

zookeeper 它是一个分布式服务框架,是 Apache Hadoop 的一个子项目,

它主要是用来解决分布式应用中经常遇到的一些数据管理问题,

如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

简单来说 zookeeper= 文件系统+监听通知机制。

2)Eureka

Eureka 是在java语言上,基于 Restful Api 开发的服务注册与发现组件,

Springcloud Netflix 中的重要组件。

3)Consul

Consul 是由 Hashicorp 基于Go 语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,

采用 Raft 算法保证服务的一致性,且支持健康检查。

4)Nacos

Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

简单来说 Nacos 就是注册中心+配置中心的组合,提供简单易用的特性集,

帮助我们解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。

Nacos 还是 Spring Cloud Alibaba 组件之一,负责服务注册与发现。

4、常见的注册中心:Zookeeper, Eureka, Consul, Nacos 的异同点:

5、注册中心:eureka 概述

1)Eureka 是 Netflix 开发的服务发现框架,springcloud 将它集成在自己的子项目 spring-cloud-netflix 中,实现 springcloud 的服务发现功能。

2)Eureka 的基本架构:

Eureka Server:提供服务注册和发现。

Service Consumer:服务消费方,从 Eureka 获取注册服务列表,从而能够消费服务。

Service Provider。服务提供方,将自身服务注册到 Eureka 从而使服务消费方能够找到。

3)Eureka 的交互流程与原理:

6、搭建 EurekaServer 注册中心,使用 Eureka 的步骤:

1)搭建 EurekaServer

创建工程,导入依赖坐标,配置 application.yml 文件,配置启动类。

2)将服务提供者注册到 EurekaServer

3)服务消费者通过注册中心获取服务列表,并调用。

7、在父工程 spring_cloud_demo 下,创建子工程(子模块)

创建 子工程(子模块)

--> 右键 spring_cloud_demo 父工程
--> Modules 
--> Maven 
--> Groupld : ( djh.it )
	Artifactld : ( eureka_service )
	Version : 1.0-SNAPSHOT
--> Next 
--> Module name: ( eureka_service )
	Content root : ( C:\java-test\idea2019\spring_cloud_demo\eureka_service )
	Module file location: ( C:\java-test\idea2019\spring_cloud_demo\eureka_service )
--> Finish

7、在子工程 eureka_service 的 pom.xml 中导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring_cloud_demo</artifactId>
        <groupId>djh.it</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureka_service</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>
<!-- C:\java-test\idea2019\spring_cloud_demo\eureka_service\pom.xml -->

9、创建配置文件 application.yml

## C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\resources\application.yml

server:
  port: 9000  # 启动端口 命令行注入。

eureka: # 配置 eureka_server
  instance:
    hostname: localhost
  client:
    register-with-eureka: false  # 是否将自己注册到注册中心
    fetch-registry: false  # 是否从 Eureka 中获取注册信息
    service-url: # 配置暴露给 EurekaClient 的请求地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

10、创建 启动类 EurekaServerApplication.java

/**
 *   C:\java-test\idea2019\spring_cloud_demo\eureka_service\src\main\java\djh\it\eureka\EurekaServerApplication.java
 *
 *   2024-4-19  启动类 EurekaServerApplication.java
 */
package djh.it.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer  //激活 Eureka
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

11、运行启动类,进行测试

浏览器地址栏输入:http://localhost:9000 输出界面如下:

上一节学习请点击:
# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(2)通过 RestTemplate 调用远程服务

相关推荐
Hello-Brand7 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码12 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.14 分钟前
Pod控制器
java·开发语言
2的n次方_17 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55117 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.18 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七22 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15129 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~30 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
theLuckyLong32 分钟前
SpringBoot后端解决跨域问题
spring boot·后端·python