restTemplate+Ribbon调用服务(二)

  • 服务调用端负载均衡--Ribbon

Ribbon 是 Netflix 发布的开源项目,主要功能是为 REST 客户端实现负载均衡可以很好的控制http和tcp的一些行为。它主要包括六个组件:

  1. ServerList,负载均衡使用的服务器列表。这个列表会缓存在负载均衡器中,并定期更新。当 Ribbon 与 Eureka 结合使用时,ServerList 的实现类就是 DiscoveryEnabledNIWSServerList,它会保存 Eureka Server 中注册的服务实例表。
  2. ServerListFilter,服务器列表过滤器。这是一个接口,主要用于对 Service Consumer 获取到的服务器列表进行预过滤,过滤的结果也是 ServerList。Ribbon 提供了多种过滤器的实现。
  3. IPing,探测服务实例是否存活的策略。
  4. IRule,负载均衡策略,其实现类表述的策略包括:轮询、随机、根据响应时间加权等.其类结构如下图所示。
  5. ILoadBalancer,负载均衡器。这也是一个接口,Ribbon 为其提供了多个实现,比如 ZoneAwareLoadBalancer。而上层代码通过调用其 API 进行服务调用的负载均衡选择。一般 ILoadBalancer 的实现类中会引用一个 IRule。

 

     6.RestClient,服务调用器。顾名思义,这就是负载均衡后,Ribbon 向 Service Provider 发起 REST 请求的工具。

Ribbon 工作时会做四件事情:

  1. 优先选择在同一个Zone且负载少的Eureka Server
  2. 定期从Eureka更新并过滤服务实例列表
  3. 根据用户指定的策略,在从Server取到的服务注册列表中选择一个实例的地址
  4. 通过RestClient进行服务调用

使用restTemplate+Ribbon调用服务(基于前面一篇Eureka的demo实现)

1.准备注册中心,并注册多个实例

这里我已准备好一个服务注册中心eureka-server(端口7000):

 

注册了两个服务实例(实际上是一个实例eureka-producer,只是修改了服务端口,相当于是多实例启动),端口分别是7001和7002:

 

2.创建一个服务消费者

 

 

 

其中需要注意的是service-ribbon的pom.xml中一定得有eureka-client,web,ribbon的依赖

 

3.添加配置文件(端口7004,服务名:service-ribbon):

 

注册服务

 

启动类中添加注解@EnableEurekaClient像服务中心注册,并注入一个bean:restTemplate,通过@LoadBalanced注解表示这个restTemplate开启负载均衡的功能。

4.启动并测试

写一个类RibbonService,通过之前注入容器的restTemplate来消费服务eureka-producer的”/helloEureka”接口,在这里我直接用服务名代替了具体的url地址,在ribbon中它会根据具体的服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。

 

编写一个controller类,调用service的方法

 

启动服务并访问(http://localhost:7004/helloRibbon?name=ribbon)。

 

 

可以看到注册中心的服务:

 

多次刷新浏览器访问,在后台的控制台可以看到是轮询访问端口为7001和7002两个服务的,这说明当我们通过调用restTemplate.getForObject(“http://service-producer/helloEureka?name=”+name,String.class)方法时,已经做了负载均衡,访问了不同的端口的服务实例。

源码地址:https://github.com/wxkhz/springcloud

 

参考大佬博客:https://blog.csdn.net/forezp/article/details/81040946

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值