2021年安全员-A证考试及安全员-A证证考试

2021年R1快开门式压力容器操作考试技巧及R1快开门式压力容器操作模拟考试题库

  返回  

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

2021/7/21 8:00:50 浏览:

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

以下为调用流程

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

 

 

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号