一般都使用Feign在微服务中进行远程调用,此方式只做了解
添加注解
:::tips 在服务消费者中将RestTemplate注册到Spring容器中,再在方法上添加@LoadBalanced注解,会对RestTemplate的请求进行拦截,然后从Nacos中根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求 :::
@Configuration
public class WebConfig{
//@LoadBalanced注解会对RestTemplate的请求进行拦截,然后从Nacos根据服务名称获取服务列表,随后利用负载均衡算法得到其中一个服务的真实地址信息,替换掉请求地址中的服务名称后再发起请求
@LoadBalanced
//注册RestTemplate到Spring容器中
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
使用RestTemplate调用微服务
@SpringBootTest
public class MyTest{
//注入RestTemplate对象
@Autowired
private RestTemplate restTemplate;
@Test
public 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,然后才会发起请求
:::