您的位置:首页 > 运维架构 > 网站架构

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

2017-03-06 08:45 645 查看

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

1.为什么要进行Eureka的集群

2.搭建eureka集群

3.服务提供者注册到高可用eureka上

4.服务提供者集群状态

5.服务消费者消费

6.综上

上文我们讲了服务提供者和服务消费者在eureka上进行服务注册和服务之间进行调用,这节来讲eureka的集群模式和服务消费者和服务提供者之间集群间的调用。

1.为什么要进行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/[/code] 
这一行配置主要起到的作用是将当前的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.综上

注册中心在起两个节点的时候,instance名字应该是一样的,要不然web界面上就会显示为unknown。

在上面两个控制台上,输出的时候应该将哪个实例提供的服务也打出来,要不然会出现两个控制台一模一样无法区分的情况。

下一期讲fegin在服务中的应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐