微服务拆分以及实现RestTemplate远程调用
案例需求
修改order-service中的根据id查询订单业务,要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。

因此,我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。
实现思路
- 注册一个RestTemplate的实例到Spring容器
- 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
- 将查询的User填充到Order对象,一起返回
代码实现
1.首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:
| package cn.itcast.order; |
| |
| import cn.itcast.feign.clients.UserClient; |
| import cn.itcast.feign.config.DefaultFeignConfiguration; |
| import org.mybatis.spring.annotation.MapperScan; |
| import org.springframework.boot.SpringApplication; |
| import org.springframework.boot.autoconfigure.SpringBootApplication; |
| import org.springframework.cloud.client.loadbalancer.LoadBalanced; |
| import org.springframework.cloud.openfeign.EnableFeignClients; |
| import org.springframework.context.annotation.Bean; |
| import org.springframework.web.client.RestTemplate; |
| |
| @MapperScan("cn.itcast.order.mapper") |
| @SpringBootApplication |
| @EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class) |
| public class OrderApplication { |
| |
| public static void main(String[] args) { |
| SpringApplication.run(OrderApplication.class, args); |
| } |
| |
| |
| |
| |
| @Bean |
| @LoadBalanced |
| public RestTemplate restTemplate() { |
| return new RestTemplate(); |
| } |
| } |
修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:
| package cn.itcast.order.service; |
| |
| import cn.itcast.order.mapper.OrderMapper; |
| import cn.itcast.order.pojo.Order; |
| import cn.itcast.order.pojo.User; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.http.ResponseEntity; |
| import org.springframework.stereotype.Service; |
| import org.springframework.web.client.RestTemplate; |
| |
| @Service |
| public class OrderService { |
| |
| @Autowired(required = false) |
| private OrderMapper orderMapper; |
| |
| |
| @Autowired |
| private RestTemplate restTemplate; |
| |
| public Order queryOrderById(Long orderId) { |
| |
| Order order = orderMapper.findById(orderId); |
| |
| |
| String url = "http://localhost:8083/user/" + order.getUserId(); |
| |
| |
| User user = restTemplate.getForObject(url, User.class); |
| |
| |
| order.setUser(user); |
| |
| return order; |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)