Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式
上文我们讲了服务提供者和服务消费者在eureka上进行服务注册和服务之间进行调用,这节来讲eureka的集群模式和服务消费者和服务提供者之间集群间的调用。
- 1.为什么要进行Eureka的集群
- 2.搭建eureka集群
- 3.服务提供者注册到高可用eureka上
- 4.服务提供者集群状态
- 5.服务消费者消费
- 6.综上
1.为什么要进行Eureka的集群 还是借用这一张图来说明吧:
文章图片
在这个图中,展示的是eureka集群的工作流程,而之所以进行eureka集群的搭建,在于在我们平时的生产环境中,很难保证单节点的eureka服务能提供百分百不间断的服务,如果eureka无响应了,整个项目应用都会出现问题,因此要保证eureka随时都能提供服务的情况下,最好的方式就是采用eureka的集群模式,也就是搭建eureka的高可用,在eureka的集群模式下,多个eureka server之间可以同步注册服务,因此,在一个eureka宕掉的情况下,仍然可以提供服务注册和服务发现的能力,从而达到注册中心的高可用。
2. 搭建eureka集群 搭建eureka集群不建立新的工程还是使用之前的模块:
- mircroservice-eureka
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查看了。
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
现在分别启动两个服务提供者实例,观察服务注册中心,服务启动完成后,将有以下服务被注册到注册中心:
文章图片
两个端口不同的microservice-provider-user服务被注册上来。
5.服务消费者消费 在服务提供者以多个节点的方式提供服务后,服务消费者则不需要也启动多个实例,直接启动一个就行了,但是在注册服务中心上,需要同服务提供者一样,注册到多个eureka上,配置与上相同,就不再贴出来了,我们之前在服务消费者中使用了Ribbon负载均衡,那么在两个服务提供者提供服务的时候,我们请求两次接口,两次请求会分别打到两个实例上,启动microservice-consumer-user,打开浏览器,观察注册中心情况,如下:
文章图片
两个服务提供者,一个服务消费者,两个服务中心。
现在在浏览器上进行请求:
http://localhost:8012/consumer/1
观察请求两次后,控制台输出,浏览器响应如之前一样,正常输出,如下:
文章图片
观察两个服务提供者控制台,服务提供者1:
文章图片
有一次请求打过来了。
观察服务提供者2:
文章图片
同样,也有一次相同的请求打进来。
6.综上
- 【微服务|Eureka的高可用以及服务提供者、服务消费者集群之间的调用方式】注册中心在起两个节点的时候,instance名字应该是一样的,要不然web界面上就会显示为unknown。
- 在上面两个控制台上,输出的时候应该将哪个实例提供的服务也打出来,要不然会出现两个控制台一模一样无法区分的情况。
- 下一期讲fegin在服务中的应用。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])