• 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

    在这里插入图片描述

  • 相关阅读:
    如何修改 GUI 默认 shader 实现自定义 UI 表现
    设计模式-10-观察者模式
    实验1 Python程序设计基础
    继认证后弄清Spring Security实现授权
    如何将 Python 运用到实际的测试工作中
    R语言ggplot2可视化:可视化多分类变量箱图(Box Plot)、自定义箱图箱体的填充色、添加主标题、副标题、题注信息
    数据库MYSQL面试篇(1)
    JSP命令标签 静态包含/动态包含
    python3读取yaml文件
    基于JAVA水果销售管理网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  • 原文地址:https://blog.csdn.net/futurn_hero/article/details/128192661