浏览器是怎么调用到服务的?
微服务向外暴露一个Restful接口@GetMapping("{user/{id}")
,然后浏览器输入对应地址http://localhost:8081/user/1
就可以请求调用到对应的接口,返回信息
那么,如果微服务也能像浏览器一样发送这样的http请求,不就可以请求到另一个微服务的信息了吗?
基于RestTemplate发起的Http请求实现远程调用
- http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。
- Sping提供了RestTemplate工具,可以实现Http请求发送:
- 注册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();
}
}
- 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;
}
}