SpringCloud环境搭建:生产和消费 RestTemplate
Spring章节复习已经过去,新的章节SpringCloud开始了,这个章节中将会回顾微服务相关
主要依照以下几个原则
- 每一个组件的Demo和Coding上传到我的代码仓库
- 在原有基础上加入一些设计模式,stream+lamdba等新的糖
- 通过DeBug调试,进入组件源码去分析底层运行的规则和设计模式
相关的代码已经上传到
链接: SpringCloudFeignImpl
可以进入develop分支去看,觉得不错的博主记得一键三连支持下
Feign的优化
在原有的多个微服务中,维护着相同的Pojo类User,和Feign接口
@FeignClient(value = "userService")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
这样可以使用,但是耦合度高
解决方案
通过抽取模块中公用的Pojo类,默认的Feign配置,我们整合了一个新的模块来让所有微服务共享这一接口
在订单服务和用户服务中封装了相同的Pojo类,维护着一个公有的url方法进行调用
首先在新的项目pom文件中导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
将原有的文件导入到新的模块中去
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
将包导入到其他资源中去
我们将这些资源抽取出来,进行封装,通过导入包的依赖进行资源共享
这样就维护了整个项目的低耦合
最后测试结果ok
在这里插入代码片
需要注意的点
@Autowired
private UserClient userClient;
注入Bean是会报错的,这是因为我们的扫描不到
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
所以我们可以通过指定方式进行注入
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = {UserClient.class})
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}