服务远程调用

我们有这样两个服务:

 

 

 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;
    }
}
  • 访问订单信息,输出结果

 

posted @ 2023-02-07 05:13  Amireux-126  阅读(11)  评论(0)    收藏  举报