在上两篇文章中,我们已经搭建起微服务架构中的核心组件 服务注册 中心(包括单节点模式和高可用模式)。同时, 还对上一章中实现的Spring Boot入门程序 做了改造。 通过简单的配置,使该程序注册到Emeka注册中心上,成为该服务治理体系下 的一个服务,命名为hello-service。 现在我们已经有了服务注册中心和服务提供者, 下面就来尝试构建一个服务消费者,它主要完成两个目标,发现服务以及消费服务。其中, 服务发现的任务由Eureka的客户端完成,而服务消费的任务由ribbon完成。Ribbon是一个基 千HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的 ribbonServerList 服务端列表去轮询访问以达到均衡负载的作用。 当Ribbon与Eureka联合使用时,ribbon 的服务实例清单ribbonServerList会被DiscoveryEnabledNIWSServerList重写, 扩展成从Eureka注册中心中获取服务端列表。 同时它也会用 NIWSDiscoveryPing 来取代IPing, 它将职责委托给Eureka来确定服务端是否已经启动。

下面我们通过构建一个简单的示例,看看在Eureka的服务治理体系下如何实现服务的 发现与消费。

• 首先,我们做一些准备工作 。启动之前实现的服务注册中心 eureka-server以及 hello-service服务,为了实验ribbon的客户端负载均衡功能, 我们通过 java -jar命令行的方式来启动两个不同端口的hello-service, 具体如下:

java -jar Eureka-0.0.1-SNAPSHOT.jar --server.port=8081

java -jar Eureka-0.0.1-SNAPSHOT.jar --server.port=8082

• 在成功启动两个hello-service服务之后, 如下图所示,从Eureka信息面板中 可以看到名为HELLO-SERVICE的服务中出现了两个实例单元,分别是通过命令行 启动的8081端口和8082端口的服务。

• 创建一个 Spring Boot 的基础工程来实现服务消费者, 取名为 ribbon-consumer, 并在 pom.xml 中引入如下的依赖内容。 较之前的 hello-service, 我们新增了 Ribbon 模块的依赖spring-cloud-starter-ribbon。

pom.xml

• 创建应用主类ConsumerApplication, 通过@EnableDiscoveryClient注解 让该应用注册为 Eureka客户端应用, 以获得服务发现的能力。 同时, 在该主类中创 建RestTemplate的 Spring Bean 实例,并通过@LoadBalanced 注解开启客户端 负载均衡。

• 创建ConsumerController类并实现/ribbon-consumer接口。 在该接口中, 通过在上面创建的RestTemplate 来实现对 HELLO-SERVICE服务提供的 /hello接口进行调用。 可以看到这里访问的地址是服务名HELLO-SERVICE,而 不是一个具体的地址,在服务治理框架中, 这是一个非常重要的性特。

• 在application.properties中配置Eureka服务注册中心的位置, 需要与之前 HELLO-SEVRCIE 一样, 不然是发现不了该 服务的,同时设置该消费者的端口为 9000, 不能与之前启动的应用端口冲突。

• 启动ribbon-consumer 应用后, 我们可以在 Eureka 信息面板中看到, 当前除了 HELLO-SERVICE 之外, 还多了我们实现的RIBBON-CONSUMER服务。

• 通过向 http://localhost:9000/ribbon-consumer 发起 GET 请求, 成功返 回了 "Hello World"。 此时, 我们可以在 ribbon-consumer 应用的控制台中看到 如下信息, Ribbon 输出了当前客户端维护的 HELLO-SERVICE 的服务列表情况。其 中包含了各个实例的位置, ribbon 就是按照此信息进行轮询访问, 以实现基千客户 端的负载均衡。 另外还输出了一些其他非常有用的信息, 如对各个实例的请求总数 量、 第一次连接信息、 上一次连接信息、 总的请求失败数量等。

再尝试发送几次请求, 并观察启动的两个 HELLO-SERVICE 的控制台, 可以看到两个控 制台会交替打印下面的日志, 这是我们之前在 HelloController 中实现的对服务信息的输 出, 可以用来判断当前豆bbon-consumer 对HELLO-SERVICE 的调用是否是负载均衡的。

com.didispace.web.HelloController : /hello , host:PC-201807022055

service id:hello-service

最新文章

  1. 异步网络加载开源框架AsyncHttpClient使用
  2. 招聘前端、Java后端开发、测试、Mysql DBA
  3. location.href参数丢失
  4. spring学习
  5. 简短的几句js实现css压缩和反压缩功能
  6. npm 介绍
  7. What is Entity Framework?
  8. Linux学习笔记19——信号2
  9. 物联网传输协议MQTT
  10. Delphi 串口通信(1)
  11. 在多线程环境中使用Jedis
  12. 开心菜鸟系列学习笔记------javascript(4)
  13. Ansible安装配置
  14. 解决项目中找不到Maven Dependencies
  15. POJ - 1182 食物链 并查集经典
  16. 031718-js变量、数据类型、运算符
  17. 20175211 2018-2019-2 《Java程序设计》第五周学习总结
  18. sencha touch Model validations 自定义验证 二选一输入验证、重复验证、时间验证、比较验证、条件验证(2015-1-14)
  19. linux查看系统状态的命令
  20. (转载)关于java多线程web服务器 以及相关资料转载

热门文章

  1. js实现svg图形转存为图片下载[转]
  2. virtualbox+vagrant学习-2(command cli)-7-vagrant login命令
  3. python基础整理2——Linux
  4. PATtest1.3:最大子列和
  5. 【ev】视频软件
  6. linux文件系统初始化过程(6)---执行init程序
  7. CCF 201709-1打酱油
  8. ORA-28000 账号被锁定的解决办法
  9. fastRPC服务使用
  10. Redis 可视化工具 Redis Desktop Manager 和 treeNMS 的使用