一、Eureka简介
Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。
Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。
服务的注册与发现机制:
关系调用说明:
- 服务生产者启动时,向服务注册中心注册自己提供的服务
- 服务消费者启动时,在服务注册中心订阅自己所需要的服务
- 注册中心返回服务提供者的地址信息个消费者
- 消费者从提供者中调用服务
三、使用Eureka进行服务治理
1. 搭建服务注册中心
通过网站: https://start.spring.io/ 进行Springboot项目创建, 我们搭建一个Eureka服务注册中心项目:
点击Generate Project后将生成一个Maven工程: eureka-server 并下载到本地, 把工程导入到eclipse中即可.
pom.xml 中的依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
需要修改EurekaServerApplication.java 添加注解:@EnableEurekaServer
添加属性配置文件:application-peer1.properties
spring.application.name=EurekaServer
server.port=1111
编译:maven install 后会生成jar包到 target目录下: eureka-server-0.0.1-SNAPSHOT.jar
在工程根目录下编写一个自动运行脚本 peer1.cmd:
java -jar ./target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
双击 peer1.cmd 开始运行,成功后,输入http://localhost:1111 可以看到监控界面
2. 搭建高可用的服务注册中心
因为服务注册中心非常重要,如何只有一个服务注册中心,一旦此注册中心发生异常,将导致所有服务消费者无法使用服务。
所以我们需要通过搭建集群服务注册中心 来保证 注册中心的高可用性:
假设我们准备部署两个服务注册中心,让他们之间互相注册对方,这样只要其中一个工作,就能保证整个应用服务正常工作。
之前我们已经有一个Eureka配置peer1, 现在我们再添加一个peer2,配置application-peer2.properties如下:
spring.application.name=EurekaServer
server.port=1112eureka.instance.name=peer2
eureka.client.regiester-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:1111/eureka
注意:我们需要把peer2这个EurekaServer当作client,注册到 peer1的EurekaServer中: http://localhost:1111/eureka
同时修改 peer1配置application-peer1.properties, 把它注册到 peer2的EurekaServer中:http://localhost:1112/eureka
spring.application.name=EurekaServer
server.port=1111eureka.instance.name=peer1
eureka.client.regiester-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:1112/eureka
在工程根目录下编写一个自动运行脚本 peer2.cmd:
java -jar ./target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
双击 peer1.cmd 开始运行。
双击 peer2.cmd 开始运行。
peer1,peer2成功后,输入http://localhost:1111 可以看到监控界面
输入http://localhost:1112 可以看到监控界面
可以看到,这两个注册服务已经互相注册到对方了。