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

干货分享微服务spring-cloud(3.服务治理eureka)

2018-02-13 15:02 991 查看
Spring cloud eureka是spring cloud netflix微服务套件中的一部分,它基于Netflix eureka增加了二次封装,主要负责完成微服务架构中的服务治理功能

3.1. 单机注册中心

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



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



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



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





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



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



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



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



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同步服务列表



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



3.3. 服务提供者

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



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



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



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



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




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



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



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