为什么要远程调用?

在微服务中应当避免重复开发相同的业务。

比如有两个微服务应用

  • 订单查询服务
  • 用户查询服务

比如要在订单查询的同时查询该订单相关的用户信息,那么遵循微服务的基本原则(在微服务中应当避免重复开发相同的业务)

所以应当在订单查询服务查询订单的同时,调用用户查询服务所暴露的 API 接口去让用户查询服务去工作返回数据。

怎么使用远程调用?

基于 SpringBoot 项目,使用 RestTemplate 类中的方法向 API 发送请求。

RestTemplate翻译:REST 架构风格模板

  1. RestTemplate 类注入到 SpringBoot 容器中。(可以直接写在 Application 启动类中)

    1. @Bean
    2. public RestTemplate restTemplate(){
    3. return new RestTemplate();
    4. }
  2. 在应当发送请求时,将 RestTemplate 对象使用@Autowired注解自动装配,调用 RestTemplat 对象的方法发送getpost请求。

    1. @Autowired
    2. private RestTemplate restTemplate;
  3. 使用 RestTemplat 对象的方法发送getpost请求。同时给予实体类参数,发送请求后会将返回的 json 数据自动封装为实体类。

    1. restTemplate.getForObject(url, 实体类); // 发送请求后会将返回的json数据自动封装为实体类
    2. restTemplate.postForObject(url, 实体类); // 发送请求后会将返回的json数据自动封装为实体类
  4. 然后将用户查询服务返回的数据封装成的实体类赋值给订单查询服务的成员变量。

小结

微服务远程调用方式

  • 基于 RestTemplate 发起的 http 请求实现远程调用
  • http 请求做远程调用与对方的语言无关,只需要知道对方的 ip、端口号、接口路径、请求参数 即可。