前言

读者:对spring、spring boot有一定了解

难度:初中级,旨在快速应用于项目

参考文献:网络、书籍、官方文档,有任何错误欢迎大家留言拍砖指正

实战模拟源码:https://github.com/yhqnh/demo-springcloud,使用spring-cloud dalston版本

Spring cloud eurekaspring cloud netflix微服务套件中的一部分,它基于Netflix eureka增加了二次封装,主要负责完成微服务架构中的服务治理功能

3.1.    单机注册中心

创建一个spring boot基础工程命名为demo-springcloud-server1,添加关键依赖

干货分享微服务spring-cloud(3.服务治理eureka)_第1张图片

在启动类Server1Application上添加@EnableEurekaServer注解启动一个服务注册中心

干货分享微服务spring-cloud(3.服务治理eureka)_第2张图片

application.properties配置,其中服务名为demo-springcloud-server


干货分享微服务spring-cloud(3.服务治理eureka)_第3张图片

启动Server1Applicationmain方法,打开浏览器访问http://localhost:1111/成功。但是启动时报错了,报错原因是服务向注册中心注册自己失败。

image.png

 

image.png

报错信息很明显,不能识别peer1,所以我们在host文件中模拟域名映射。笔者使用的是windows系统,所以C:\Windows\System32\drivers\etc\hosts文件添加127.0.0.1 peer1,再次启动将不会报错

image.png

使用浏览器访问http://localhost:1111/http://peer1:1111/都会成功。Instances currently registered with Eureka下的Application注册了一个DEMO-SPRINGCLOUD-SERVER服务。

干货分享微服务spring-cloud(3.服务治理eureka)_第4张图片

在默认配置下,eureka.client.fetch-registry=true, 作为客户端定期获取服务列表,更新客户端的服务清单,以保证服务访问的正确性。作为注册中心一般我们会置为false,因为注册中心不需要更新服务清单。eureka.client.register-with-eureka=true该服务会向注册中心注册它自己,以便其他应用可以发现它。如果我们需要禁用它的客服端行为,这种场景只适合单机注册中心,只需在application.properties中增加如下配置

干货分享微服务spring-cloud(3.服务治理eureka)_第5张图片

再次浏览器访问http://localhost:1111/将不会注册自己为服务端,No instances available

干货分享微服务spring-cloud(3.服务治理eureka)_第6张图片

3.2.    注册中心HA

       Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样可以形成一组相互注册的服务注册中心,以实现服务列表的互相同步,达到高可用的目的。复制单机注册中心并命名为demo-springcloud-server2,启动类命名为Server2Application,同理hosts文件需要配置peer2, eureka.client.register-with-eureka必须设置为true向注册中心注册自己,以便注册中心之间同步服务列表,注册中心1和2主要区别在于配置文件。

demo-springcloud-server1配置文件application.properties向eureka.client.service-url.defaultZone=http://peer2:1112/eureka注册中心2同步服务列表

干货分享微服务spring-cloud(3.服务治理eureka)_第7张图片

demo-springcloud-server2配置文件application.propertieseureka.client.service-url.defaultZone=http://peer1:1111/eureka注册中心1同步服务列表

干货分享微服务spring-cloud(3.服务治理eureka)_第8张图片

3.3.    服务提供者

有了注册中心,下面新建spring boot项目并命名为demo-springcloud-client1,启动类命名为Client1Application,添加注解@EnableDiscoveryClient开启服务提供者EurekaDiscoveryClient的实现自动配置

干货分享微服务spring-cloud(3.服务治理eureka)_第9张图片

项目关键依赖,spring-boot-starter-web表示是web应用

干货分享微服务spring-cloud(3.服务治理eureka)_第10张图片

配置文件application.properties,为了验证注册中心服务列表是否同步,这里我们只向注册中心1注册服务eureka.client.service-url.defaultZone=http://peer1:1111/eureka

image.png

既然是服务提供者,我们这里演示新建一个YhqController提供rest的hello服务

干货分享微服务spring-cloud(3.服务治理eureka)_第11张图片

启动服务中心1,服务中心2,启动服务提供者demo-springcloud-client1
用浏览器访问http://localhost:2221/hello看到hello服务访问正常


干货分享微服务spring-cloud(3.服务治理eureka)_第12张图片

这里可能对spring不熟悉的人会觉得为什么返回client1而不是页面,因为这里的用到了之前讲到的组合注解,根本原因在于@RestController注解组合了@Controller@ResponseBody

干货分享微服务spring-cloud(3.服务治理eureka)_第13张图片

用浏览分别访问http://peer1:1111/http://peer2:1112/都可以看到Instances currently registered with Eureka注册服务提供者DEMO-SPRINGCLOUD-CLIENT,证明服务列表已经同步,但实际使用中我们不推荐这样使用,我们一般会同时向注册中心1、注册中心2同时注册服务,而不是单一只向注册中心1注册服务

干货分享微服务spring-cloud(3.服务治理eureka)_第14张图片

干货分享微服务spring-cloud(3.服务治理eureka)_第15张图片