微服务远程调用-RestTemplate

浏览器是怎么调用到服务的?

微服务向外暴露一个Restful接口@GetMapping("{user/{id}"),然后浏览器输入对应地址http://localhost:8081/user/1就可以请求调用到对应的接口,返回信息

那么,如果微服务也能像浏览器一样发送这样的http请求,不就可以请求到另一个微服务的信息了吗?

基于RestTemplate发起的Http请求实现远程调用

  • http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。
  • Sping提供了RestTemplate工具,可以实现Http请求发送:
  1. 注册RestTemplate
    在order-service的OrderApplication中注册RestTemplate
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
  1. RestTemplate发起的Http请求实现远程调用

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发送http请求,查询用户
        // 2.1 url路径
        String url = "http://localhost:8081/user" + order.getUserId();
        // 2.2 发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到order
        order.setUser(user);
        // 4.返回
        return order;
    }
}
image.png

你可能感兴趣的:(微服务远程调用-RestTemplate)