服务远程调用
我们有这样两个服务:

order:订单服务。
user:用户服务。
用户服务中提供了获取用户信息的接口,可以根据用户id获取用户信息。
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{userId}") public User queryUserByUserId(@PathVariable Long userId) { User user = userService.queryUserByUserId(userId); return user; } }

订单服务中提供了获取订单信息的接口,可以根据订单id获取订单信息。
@RestController @RequestMapping("/order") public class OrderController { @Autowired private OrderService orderService; @GetMapping("/{orderId}") public Order queryOrderByOrderId(@PathVariable Long orderId) { Order order = orderService.queryOrderByOrderId(orderId); return order; } }

这里我们订单表里是存在用户id的,如果我们希望在获取工单信息时,同时获取用户信息该如何操作呢?
这里可以使用到 RestTemplate 来实现服务之间的远程调用。
- 注入 RestTemplate 依赖
@SpringBootApplication @MapperScan("com.exambner.order.mapper") public class OrderApplication { public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } /** * 创建RestTemplate并注入容器 * @return */ @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
- 服务远程调用RestTemplate
package com.exambner.order.service; import com.exambner.order.entity.Order; import com.exambner.order.mapper.OrderMapper; import com.exambner.user.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @Service public class OrderService { @Autowired private OrderMapper orderMapper; /** * 导入RestTemplate依赖 */ @Autowired private RestTemplate restTemplate; public Order queryOrderByOrderId(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、将用户信息赋值给order order.setUser(user); //4、返回订单信息 return order; } }
- 访问订单信息,输出结果


浙公网安备 33010602011771号