SpringCloud环境搭建:生产和消费 RestTemplate

Spring章节复习已经过去,新的章节SpringCloud开始了,这个章节中将会回顾微服务相关
主要依照以下几个原则

  1. 每一个组件的Demo和Coding上传到我的代码仓库
  2. 在原有基础上加入一些设计模式,stream+lamdba等新的糖
  3. 通过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>

SpringCloud框架(三):微服务优化,Feign的最佳实现方案-LMLPHP
将原有的文件导入到新的模块中去

        <dependency>
            <groupId>cn.itcast.demo</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0</version>
        </dependency>

将包导入到其他资源中去

我们将这些资源抽取出来,进行封装,通过导入包的依赖进行资源共享

SpringCloud框架(三):微服务优化,Feign的最佳实现方案-LMLPHP

这样就维护了整个项目的低耦合

最后测试结果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);
    }

}

SpringCloud框架(三):微服务优化,Feign的最佳实现方案-LMLPHP

12-06 03:55