一般都使用Feign在微服务中进行远程调用,此方式只做了解

添加注解

:::tips 在服务消费者中将RestTemplate注册到Spring容器中,再在方法上添加@LoadBalanced注解,会对RestTemplate的请求进行拦截,然后从Nacos中根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求 :::

  1. @Configuration
  2. public class WebConfig{
  3. //@LoadBalanced注解会对RestTemplate的请求进行拦截,然后从Nacos根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求
  4. @LoadBalanced
  5. //注册RestTemplate到Spring容器中
  6. @Bean
  7. public RestTemplate restTemplate(){
  8. return new RestTemplate();
  9. }
  10. }

使用RestTemplate调用微服务

  1. @SpringBootTest
  2. public class MyTest{
  3. //注入RestTemplate对象
  4. @Autowired
  5. private RestTemplate restTemplate;
  6. @Test
  7. public void test1(){
  8. Long id = 1;
  9. //配置Ribbon后,请求地址中的IP和端口号就可以修改为想要调用的服务的名称
  10. User user = restTemplate.getForObject("http://userservice/user/" + id, User.class);
  11. }
  12. }

:::tips 执行的基本流程:

  • 在注册RestTemplate的方法上打上@LoadBalanced注解,来拦截RestTemplate的请求http://userservice/user/1
  • RibbonLoadBalancerClient从请求地址中获取服务名称,也就是userservice
  • DynamicServerListLoadBalancer根据服务名称到Nacos拉取服务列表
  • Nacos返回服务列表后,IRule利用内置负载均衡规则,从服务列表中选择一个服务地址
  • RibbonLoadBalancerClient会修改请求地址,用上面选择的服务地址替换掉服务名称,得到真实的请求地址http://服务IP地址:服务端口号/user/1,然后才会发起请求

image.png :::