文章目录
- 摘要
- 1 RPC框架-Feign
- 1.1 什么是Feign
- 1.2 Feign解决的问题
- 1.2.1 使用RestTemplate发送远程调用代码
- 1.2.1.1 项目示例调用链路
- 1.2.1.2 代码逻辑
- 1.2.1.3 代码实现
- 1.2.1.4 存在的问题
- 1.3 Feign如何使用
- 1.3.1 使用逻辑
- 1.3.2 引入依赖
- 1.3.3 启动类添加注释开启feign功能
摘要
摘要:RestTemplate;Feign;远程调用;
1 RPC框架-Feign
1.1 什么是Feign
Feign是一个简化HTTP客户端编写的框架,通过声明式方式将远程服务调用封装成简单接口调用。
1.2 Feign解决的问题
1.2.1 使用RestTemplate发送远程调用代码
要求:系统调用者在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。
1.2.1.1 项目示例调用链路
1.2.1.2 代码逻辑
- ① 注册一个RestTemplate实例到spring容器
- ② 修改order-service中OrderService类中queryOrderById方法,根据Order对象中userId查询User
- ③ 将查询的User填充到Order对象返回。
1.2.1.3 代码实现
//配置类
/**
* RestTemplate
*
*/
@Configuration
public class RestTemplateRPC {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
//业务层
@Resource
private OrderMapper orderMapper;
@Resource
private RestTemplateRPC restTemplateRPC;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2.远程调用
//2.1 远程调用地址
String url = "http://localhost:8081/user/" + order.getUserId();
//2.2发起调用
User user = this.restTemplateRPC.restTemplate().getForObject(url, User.class);
//3.存入order
order.setUser(user);
// 4.返回
return order;
}
1.2.1.4 存在的问题
代码可读性差,编码体验不统一
参数复杂URL难以维护,导致代码耦合性太高。
1.3 Feign如何使用
1.3.1 使用逻辑
- 引入依赖
- 添加注解
- 编写Feign客户端
1.3.2 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>