restTemplate怎样结合ribbon实现远程负载均衡调用

1、在我们不使用注册中心时,restTemplate远程调用一个端口时使用的是如下代码

restTemplate.getForObject("http://localhost:8088/demo/", String.class);

缺点:里面硬编码将服务提供者的ip及端口写入代码中,如果哪天服务提供者更换了ip及端口我们还要改代码,这显然不是我们想要的

2、于是就有了注册中心,所有的微服务都注册到注册中心后,服务消费者可以直接去注册中心获取服务提供者信息,选择一个调用,这样不存在硬编码,代码如下

//通过服务发现客户端从注册中心通过服务名称获取服务列表
List<ServiceInstance> instances = discoveryClient.getInstances("andy-provide");
//获取第一个服务实例(这里没有做负载均衡)
ServiceInstance serviceInstance = instances.get(0);
//获取服务的ip及端口
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();
//动态拼接url进行调用
restTemplate.getForObject("http://"+host+":"+port+"/demo/", String.class);

 缺点:显而易见,虽然动态拼接了url解决了硬编码,但是需要手动获取服务列表选择调用

3、负载均衡组件ribbon上场

@Bean 
@LoadBalanced //在 RestTemplate 上加 LoadBalanced 注解就代表使用ribbon
public RestTemplate getRestTemplate(){
    return new RestTemplate();
}
//直接通过服务名称调用,ribbon会去注册中心获取服务列表
//并且负载均衡选择一个服务实例交给restTemplate调用
restTemplate.getForObject("http://andy-provide/demo/", String.class);

总结:当然最终我们是通过feign来调用,其实feign底层也是封装了restTemplate

以下为调用流程

更多知识请扫描关注公众号

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值