一般都使用Feign在微服务中进行远程调用,此方式只做了解
添加注解
:::tips 在服务消费者中将RestTemplate注册到Spring容器中,再在方法上添加@LoadBalanced注解,会对RestTemplate的请求进行拦截,然后从Nacos中根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求 :::
@Configurationpublic class WebConfig{//@LoadBalanced注解会对RestTemplate的请求进行拦截,然后从Nacos根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求@LoadBalanced//注册RestTemplate到Spring容器中@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
使用RestTemplate调用微服务
@SpringBootTestpublic class MyTest{//注入RestTemplate对象@Autowiredprivate RestTemplate restTemplate;@Testpublic void test1(){Long id = 1;//配置Ribbon后,请求地址中的IP和端口号就可以修改为想要调用的服务的名称User user = restTemplate.getForObject("http://userservice/user/" + id, User.class);}}
:::tips 执行的基本流程:
- 在注册RestTemplate的方法上打上@LoadBalanced注解,来拦截RestTemplate的请求http://userservice/user/1
- RibbonLoadBalancerClient从请求地址中获取服务名称,也就是userservice
- DynamicServerListLoadBalancer根据服务名称到Nacos拉取服务列表
- Nacos返回服务列表后,IRule利用内置负载均衡规则,从服务列表中选择一个服务地址
- RibbonLoadBalancerClient会修改请求地址,用上面选择的服务地址替换掉服务名称,得到真实的请求地址http://服务IP地址:服务端口号/user/1,然后才会发起请求
:::
