(一)高可用的注册中心
之前构建的服务构建中心都是属于单节点的,Spring Cloud还可以通过集群的方式构建高可用的服务构建中心来增强系统的可用性。
之前我们是通过下面的两个参数来使得服务中心不注册自己
而Eureka Server的高可用其实就是服务中心将自己作为服务向其他服务中心注册自己,通过服务中心相互注册的方式,同步服务清单,以达到高可用的目的,接下来我们来尝试搭建高可用服务注册中心的集群
在之前的eureka-server中创建application-beiyi1.yml,作为beiyi1服务中心的配置,并将serviceUrl指向beiyi2,具体配置如下:
创建application-beiyi2.yml,作为beiyi2服务中心的配置,并将serviceUrl指向beiyi1,具体配置如下:
在/etc/hosts文件中添加对beiyi1和beiyi2的转换,
127.0.0.1 beiyi1
127.0.0.1 beiyi2
将eureka-server项目通过maven打包,之后以java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=beiyi1和java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=beiyi2两条命令分别启动eureka-server
打包
命令启动(我是先在idea中启动第一条命令,而后又通过终端启动第二条命令)
打开浏览器分别访问,可以看到两个注册中心(beiyi1和beiyi2)的页面分别有如下信息:
此外服务提供方还需要做一些简单的配置才能将服务注册到eureka server集群中
(不知道有没有自动化点的方式,让服务提供方自动注册到集群中)
(二)服务的发现与消费
通过之前的实践,我已经简单的搭建好了服务注册中心(eureka server)以及服务提供者(eureka discover),下面尝试构建一个服务消费者,它主要有两个目标:发现服务与消费服务。其中服务发现由之前讲到的eureka负责,而服务消费由Ribbon完成,Ribbon是一个基于HTTP和TCP的客户端负载均衡器。关于Ribbon会在以后详细说明。
首先,跟之前一样通过java -jar的命令行方式启动两个不同端口的eureka discover,端口号分别是8081和8082,之后再启动注册中心,在注册中心页面可以看到BEYI-CLIENT有两个实例:
创建一个springboot应用来实现服务消费者,取名:ribbon-consumer,引入依赖:
在应用主类上添加@EnableDiscoveryClient注解启用服务发现的能力,同时创建RestTemplate的spring bean,通过@LoadBalanced注解开启客户端负载均衡。
创建一个Controller同时注入RestTemplate实例来实现对BEIYI-CLIENT服务提供的/hello接口进行调用
可以看到,这里面对服务提供者访问的路径是BeiYi-Client,而不是一个具体的地址,这是一个很重要的特性。消费者应该是通过这个BeiYi-Client向注册中心寻找到具体的服务提供方的地址,这也是注册中心的一个很重要的作用。
接下来是配置文件中配置服务中心的位置,以及端口号:
启动之后可以在注册中心看到ribbon-consumer服务:
访问ribbon-consumer提供的/ribbon-consumer接口,可以得到BEIYI-CLIENT服务提供的/hello接口输出的信息:
这样服务的发现与消费基本就告一段落了