1.导入feign的启动器
<!-- Feign启动器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.开启Feign客户端支持
在服务消费者引导类中添加注解
@EnableFeignClients
3.编写feign客户端==接口==
客户端接口要与服务提供者的入口方法保持一致(与服务提供者Controller中的方法名一致)
@FeignClient("userservice") // 设置服务提供者的名称
@Component // 创建接口实现类对象,并将对象存放到IOC容器中
/**
* @Author: linlinchen
* @name:UserFeignClient
* @Date:2023/8/15 14:38
* todo: Feign原理: 使用动态代理技术生成当前接口的代理类,在代理类中使用RestTemplate进行远程访问
*/
@FeignClient(value = "userservice",path = "/user")
@Component // 创建当前接口的代理类对象,并将对象存放到IOC容器中
public interface UserFeignClient {
// 直接从被调用的服务中(controller层)抄过来即可
@RequestMapping("/findById/{id}")
TbUser findById(@PathVariable Integer id);
}
4.调用Feign客户端实现远程调用
/**
* @author linlinchen
* @description 针对表【tb_order】的数据库操作Service实现
* @createDate 2023-08-14 18:45:59
*/
@Service
public class TbOrderServiceImpl extends ServiceImpl<TbOrderMapper, TbOrder>
implements TbOrderService{
// @Autowired
// private RestTemplate restTemplate;
@Autowired
private UserFeignClient userFeignClient;
@Override
public TbOrder findById(Integer id) {
// todo:根据ID查询订单信息
TbOrder order = this.getById(id);
// todo: 远程访问user服务,根据ID查询用户信息
TbUser user = userFeignClient.findById(Integer.parseInt(order.getUserId()+""));
// todo: 封装结果
order.setUser(user);
return order;
}