在上一篇Sring Cloud入门(一)注册中心 Eureka中,只搭建了一个Eureka注册中心,存在单点故障,无法保证高可用。所以我们这次需要对注册中心进行升级改造,搭建2个Eureka注册中心,彼此相互注册,这样的话其中一个Eureka注册中心故障了,不至于整个注册中心瘫痪。 在项目order-server下增加2个配置文件application-server1.properties和application-server2.properties 表示eureka集群的2个节点 将application.properties里面的server.port=8761去掉 在application-server1.properties中新增如下配置
#设置server1节点端口 server.port=8761 #将server1节点注册到server2节点 eureka.client.serviceUrl.defultZone=http://localhost:8762/eureka/在application-server2.properties中新增如下配置
#设置server2节点端口 server.port=8762 #将server2节点注册到server1节点 eureka.client.serviceUrl.defultZone=http://localhost:8761/eureka/这样一来,2个节点就相互注册上了,我们可以通过启动参数 --spring.profiles.active=server1和–spring.profiles.active=server2来分别启动注册中心这个项目。
启动成功后,我就拥有了http://localhost:8761/和http://localhost:8762/ 这2个Eureka注册中心,保证了高可用,其中一个挂掉后,还能剩下一个继续提供服务。
接下来再来改造一下服务之间的调用,到目前为止服务与服务之间调用是直接使用写死的ip+端口 如果哪天ip地址或端口号变更,微服务实例少则几十,多则几百上千,每一个都要修改这无疑是一场灾难。 既然服务已经在eureka注册了,那么就可以将调用地址替换成服务名称的方式了,这就是ribbon给我们提供的功能,只需要在RestTemplate加上@LoadBalanced注解;
系统将能识别出服务名称,再也无需关系调用的ip是多少,端口是多少,只需要在eureka注册中心中获取服务名称即可。 服务调用从 http://localhost:8082/order/pay 换成了 http://order-pay/order/pay。 注解@LoadBalanced还有一个更大的功能,即他的字面意思,负载均衡。 目前系统中每个模块都还是单实例,存在单点故障,也需要改造成双节点,方法和前面的eureka双节点搭建是一样的,这里以order-create为例子,新增2个配置文件application-n1.properties和application-n2.properties代表2个节点不同的端口配置,分别是server.port=8880和server.port=8881,配置好idea的启动参数,分别启动2个order-pay实例 当我使用服务消费者order-user项目来访问order-create服务的时候,ribbon就会使请求均衡的分发到2个实例上。实现了负载均衡。 order-pay和order-deliver也按同样的样式搭建双节点集群,这里就不再详细描述了。