Ribbon,空耳"惹(卷舌)苯".是Netfix发布的负载均衡器.
为Ribbon配置好服务提供者的地址列表后,Ribbon便可基于某种负载均衡算法帮助消费者请求生产者
【在Spring Cloud中,当EurekaClient整合了Ribbon后,Ribbon可以自动地获取EurekaServer的服务提供者的地址列表】
使用消费者服务consumer整合Ribbon之前,首先需要在pom.xml中引入Ribbon的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
然后,打开consumer服务的启动类.找到restTemplate对象的Bean配置.添加上@LoadBalanced注解,即可完成对Ribbon的整合
此时,由于RestTemplate对象已经整合了Ribbon.
Ribbon会自动将虚拟主机名映射成服务的网络地址.
所以在请求生产者服务接口的时候,没有必要再输入IP和端口去指定处理服务的实例了.
修改一下消费者调用生产者获取用户接口的调用写法.
此时,还需要修改一下provider项目的yml配置.
由于Ribbon是将虚拟主机名映射成网络地址,而我的provider项目设置了其他的hostname,不再是localhost了.
所以需要让provider项目将自己的IP地址注册到EurekaServer上去.不然消费者将找不到被调用的生产者.
为了能够更加直观的看到restTemplate是否成功整合了Ribbon.
仅需要简单的修改一下生产者的接口,让其输出被调用时服务的端口即可.
分别启动eureka、provider和consumer项目.其中,provider启动两个服务实例.以验证消费者成功整合Ribbon.
成功启动服务后,进入Eureka服务发现与注册中心,查看一下已注册实例.
输入指定的http basic账号密码
进入服务发现与注册中心
在浏览器输入http://localhost:8181/user/2.然后不停的刷新.就会发现消费者是有选择性的调用生产者实例.
那么说明,消费者的restTemplate已经成功整合了Ribbon组件.可以正常的将请求均匀分摊到多个生产者服务的接口上.