微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式

Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式

  • 1.为什么要进行Eureka的集群
  • 2.搭建eureka集群
  • 3.服务提供者注册到高可用eureka上
  • 4.服务提供者集群状态
  • 5.服务消费者消费
  • 6.综上
上文我们讲了服务提供者和服务消费者在eureka上进行服务注册和服务之间进行调用,这节来讲eureka的集群模式和服务消费者和服务提供者之间集群间的调用。
1.为什么要进行Eureka的集群 还是借用这一张图来说明吧:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

在这个图中,展示的是eureka集群的工作流程,而之所以进行eureka集群的搭建,在于在我们平时的生产环境中,很难保证单节点的eureka服务能提供百分百不间断的服务,如果eureka无响应了,整个项目应用都会出现问题,因此要保证eureka随时都能提供服务的情况下,最好的方式就是采用eureka的集群模式,也就是搭建eureka的高可用,在eureka的集群模式下,多个eureka server之间可以同步注册服务,因此,在一个eureka宕掉的情况下,仍然可以提供服务注册和服务发现的能力,从而达到注册中心的高可用。
2. 搭建eureka集群 搭建eureka集群不建立新的工程还是使用之前的模块:
  • mircroservice-eureka
更改配置文件application.yml,为:
spring: profiles: eureka1 server: port: 8001 eureka: instance: hostname: eureka client: serviceUrl: defaultZone: http://eureka2:8002/eureka/--- spring: profiles: eureka2 server: port: 8002 eureka: instance: hostname: eureka2 client: serviceUrl: defaultZone: http://eureka1:8001/eureka/

client: serviceUrl: defaultZone: http://eureka1:8001/eureka/

这一行配置主要起到的作用是将当前的eureka注册到端口为8001的这一个eureka上去。
在etc/hosts中配置eureka1和eureka2,如下:
127.0.0.1 eureka1 127.0.0.1 eureka2

对maven工程编译打包之后,运行命令:
java -jar microservice-eureka-1.0-SNAPSHOT.jar --spring.profiles.active=eureka1 java -jar microservice-eureka-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2

打开浏览器,输入http://eureka1:8001,如下图:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

如上图,高可用的eureka已经搭建成了,在这就不再另外打开另一个eureka查看了。
3.服务提供者注册到高可用eureka上 当eureka为高可用服务之后,服务提供者、服务消费者的注册也不能再是一个节点上,要同时注册到所有的注册中心之上,配置要做以下修改:
eureka: client: serviceUrl: defaultZone: http://eureka1:8001/eureka/,http://eureka2:8002/eureka/ instance: preferIpAddress: true

4.服务提供者集群状态 我们的服务提供者仍然不变,是microservice-provider-user,但是配置文件需要做一些修改,
两个实例在同一台物理机上需要端口不一样,因此第一个实例端口为
server: port: 8011

第二个为:
server: port: 8013

现在分别启动两个服务提供者实例,观察服务注册中心,服务启动完成后,将有以下服务被注册到注册中心:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

两个端口不同的microservice-provider-user服务被注册上来。
5.服务消费者消费 在服务提供者以多个节点的方式提供服务后,服务消费者则不需要也启动多个实例,直接启动一个就行了,但是在注册服务中心上,需要同服务提供者一样,注册到多个eureka上,配置与上相同,就不再贴出来了,我们之前在服务消费者中使用了Ribbon负载均衡,那么在两个服务提供者提供服务的时候,我们请求两次接口,两次请求会分别打到两个实例上,启动microservice-consumer-user,打开浏览器,观察注册中心情况,如下:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

两个服务提供者,一个服务消费者,两个服务中心。
现在在浏览器上进行请求:
http://localhost:8012/consumer/1

观察请求两次后,控制台输出,浏览器响应如之前一样,正常输出,如下:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

观察两个服务提供者控制台,服务提供者1:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

有一次请求打过来了。
观察服务提供者2:
微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
文章图片

同样,也有一次相同的请求打进来。
6.综上
  • 【微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式】注册中心在起两个节点的时候,instance名字应该是一样的,要不然web界面上就会显示为unknown。
  • 在上面两个控制台上,输出的时候应该将哪个实例提供的服务也打出来,要不然会出现两个控制台一模一样无法区分的情况。
  • 下一期讲fegin在服务中的应用。

    推荐阅读