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


    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);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样可以使用,但是耦合度高

    解决方案

    通过抽取模块中公用的Pojo类,默认的Feign配置,我们整合了一个新的模块来让所有微服务共享这一接口

    在订单服务和用户服务中封装了相同的Pojo类,维护着一个公有的url方法进行调用

    首先在新的项目pom文件中导入依赖

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    将原有的文件导入到新的模块中去

            <dependency>
                <groupId>cn.itcast.demo</groupId>
                <artifactId>feign-api</artifactId>
                <version>1.0</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    将包导入到其他资源中去

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

    在这里插入图片描述

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

    最后测试结果ok

    在这里插入代码片
    
    • 1

    需要注意的点

    
        @Autowired
        private UserClient userClient;
    
    • 1
    • 2
    • 3

    注入Bean是会报错的,这是因为我们的扫描不到

    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    @EnableFeignClients
    public class OrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    所以我们可以通过指定方式进行注入

    @MapperScan("cn.itcast.order.mapper")
    @SpringBootApplication
    @EnableFeignClients(clients = {UserClient.class})
    public class OrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

  • 相关阅读:
    Thrift -- 跨语言RPC 框架
    解密第三方登录-微信扫码登录 Java生成二维码
    前端小tips(持续更新)
    数据链路层
    Java:什么是Java中的构造函数?
    Apache Kafka教程--Kafka新手入门
    【Text2SQL 论文】T5-SR:使用 T5 生成中间表示来得到 SQL
    NFS网盘挂载-Ubuntu(linux)
    一次说清楚BCD编码
    Harmony 复杂图形自绘制
  • 原文地址:https://blog.csdn.net/futurn_hero/article/details/128192661