您的位置:首页 > 编程语言 > Java开发

Spring Cloud 构建微服务-高可用注册中心

2017-06-26 16:04 627 查看
本文介绍的是Spring Cloud 高可用的服务注册中心,如何注册及发现服务,并且附上demo,仅供参考。

1、如何构建和启动服务注册中心:

Eureka除了单点部署,也可以多个点部署,多个点部署这里就是我们所说的高可用服务注册中心,所以我们只需要在Eureka的服务注册配置上配置不一样的

Eureka的访问地址,也就是访问服务注册信息的地址,配置信息如下:

Eeureka.client.serviceUrl.defaultZone

创建application-peer1.properties文件,并且添加如下信息:

spring.application.name=eureka-server
#指定该Eureka实例的端口
server.port=1001

eureka.instance.hostname=peer1
#Eureka Server的访问地址,服务注册和client获取服务注册信息均通过该URL,多个服务注册地址用,隔开
eureka.client.serviceUrl.defaultZone=http://peer2:1002/eureka/
创建application-peer2.properties文件,并且添加 如下信息:
spring.application.name=eureka-server
server.port=1002

eureka.instance.hostname=peer2
#Eureka Server的访问地址,服务注册和client获取服务注册信息均通过该URL,多个服务注册地址用,隔开
eureka.client.serviceUrl.defaultZone=http://peer1:1001/eureka/

在/etc/hosts文件添加如下内容:
127.0.0.1 peer1
127.0.0.1 peer2
通过java -jar 的方式启动jar并且指定properties文件:
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer2
另外一种方式其实一样:

java -jar eureka-server-1.0.0.jar -Dspring.profiles.active=peer1

还有一种方式就是在默认的application.properties文件中指定properties名称并且启动:

启动第一实例时server.port修改成 1001和spring.profiles.active[0]修改成peer1 即可,第二个实例修改前面的两个参数即可

eureka.client.regiseter-with-eureka 的意思看如下注释,默认为true,我们启动多个实例都可以在自己的Eureka Server看到自己启动的实例,如配置信息下图:

spring.application.name=eureka-server
#指定该Eureka实例的端口
server.port=1002

eureka.instance.hostname=localhost

#表示是否将自己注册到Eureka Server上,默认为true,当前应用为Eureka Server所以无需注册,默认是可以在Eureka Server看到自己的注册信息
#eureka.client.register-with-eureka=false

#表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
#eureka.client.fetch-registry=false

#指定profiles文件,例如:application-peer1.properties 填写peer1即可,其它方式如下:
#使用命令的方式:java -jar xxx.jar --spring.profiles.active=peer1 或-Dspring.profiles.active=peer1
spring.profiles.active[0]=peer2

logging.file=${spring.application.name}.log





如果不显示EUREKA-SERVER的信息,设置如下信息即可:

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

从上图我们启动两个应用实例后,访问localhost:1001和localhost:1002, 我们都可以看到自己的Eureka Server的注册中心信息。

我们在compute-service服务配置如下信息:

spring.application.name=compute-service
server.port=2222
eureka.client.serviceUrl.defaultZone=http://peer1:1001/eureka/,http://peer2:1002/eureka/
我们讲注册中心指向之前的两个应用实例,我们断开peer1应用,依然在peer2能访问到compute-service,因为此服务在两个注册中心都注册,另外一个服务注册中心挂了,也能在peer2能访问到compute-service,从而实现了高可用的服务注册中心。

以上例子作为双节点例子,但是实际上因负载等原因,我们往往可能需要在生产环境构建多于两个的Eureka Server节点。那么对于如何配置serviceUrl来让集群中的服务进行同步,需要我们更深入的理解节点间的同步机制来做出决策。

Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。什么意思呢?不妨我们通过下面的实验来看看会发生什么。

场景一:假设我们有3个注册中心,我们将peer1、peer2、peer3各自都将serviceUrl指向另外两个节点。换言之,peer1、peer2、peer3是两两互相注册的。启动三个服务注册中心,并将compute-service的serviceUrl指向peer1并启动,可以获得如下图所示的集群效果。



我们可以得出下面的结论:

两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
参考链接:点击打开链接

源码链接:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: