微服务中不同服务使用openfeign 相互调用

首先 我们上文 已经知道了 nacos 的注册服务,现在 我们 在不同服务中相互调用就可以使用openfeign 直接调用,而不是 再写冗余的调用代码啦

首先 我们的微服务组件如下

因为我这个微服务是我在 员工登录demo 中 拆出来的,在userlogin模块中 我集成了 用户登录和员工查询,耦合度比较高,大家先凑合看,但是这并不影响 阅读哈哈

首先 我们分析 一下我自己设计的业务逻辑

业务逻辑分析

我有两个表 ,一个是 员工信息表,一个部门信息表 ,

员工信息表中存着员工的所有信息包括 员工属于哪个部门 ,部门信息表 只存着部门的名称

现在我们看 我们的添加员工的 service实现方法

java 复制代码
  @Override
    @Transactional
    @FillAuto
    public EmployeeVo insertOne(EmployeeJoinDTO employeeJoinDTO) throws InterruptedException {
        Employee employee = new Employee();
        BeanUtils.copyProperties(employeeJoinDTO, employee);
        if (employeeJoinDTO.getGender() == MessageConstant.BOY) {
            employee.setGender(EmployeeGender.BOY);
        } else {
            employee.setGender(EmployeeGender.GIRL);
        }
        //强行使用微服务进行插入   正常来说 前端 进行 进行部门调用的接口 是 直接在下拉框那里进行查询部门 ,但是 这里 我们 选择
        //  手动输入部门进行插入  所以我们要进行 部门判断  判断部门是否存在再进行save操作
        Result<List<DepartmentVo>> listResult = departmentClient.queryDepartments();
        List<DepartmentVo> data = listResult.getData();
        int a = 0;
        for (DepartmentVo departmentVo : data) {
            if (departmentVo.getDepartment().equals(employee.getDepartment())) {
                a++;
            }
        }
        if (a == 1) {
            save(employee);
        }else {
            throw new CommonException("部门调查失败", -1);
        }
        EmployeeVo employeeVo = BeanUtil.copyProperties(employee, EmployeeVo.class);

        return employeeVo;
    }

重点看 中间的代码部分

我们 在查询部门的时候 使用的openfeign 调用,而不是传统的 手撸了

而我们再看查询部门的代码部分

feign调用

首先 我们是在 userlogin 服务里面调用 department 服务,我们需要把这两个 都注册到 nacos 注册中心然后单独定义一个 模块 装载所有的远程feign调用

也就是我们上文的feign 模块,单独定义一个feign模块 主要是为了防止代码耦合度过高

我们在feign模块中 引入依赖

java 复制代码
  <!--openFeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.3</version>
        </dependency>
        <!--负载均衡器-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>3.1.3</version>
        </dependency>

这里我们想一个问题 ,我们把远程调用的代码 单独定义到一个模块中去,我们怎么保证 其他模块能访问到这个 调用接口 呢?

答案是,把feign模块 通过maven的依赖传递 加载到 其他模块的 pom文件中去

下面是我userlogin 的pom文件引入

调用代码

我们定义一个接口

这个feignclient 注解 相当于 把 department 注册到nacos的服务 接口拉取到这里 ,然后对querydepartment 接口 进行网址的拼接调用 , feignclient 注解中写的 一串字符串是 我们 department 注册到nacos的服务名。 ,

然后 我们是在 userlogin模块中发起feign 调用的,所以我们需要在该模块的启动类中开启 openfeign 的调用

我们指定 好 client 接口所在的 包即可

这样就能远程调用啦

相关推荐
云惠科技(SEO)15 分钟前
泛目录站群技术架构演进观察:2025年PHP+Java混合方案实战笔记
java·人工智能·搜索引擎
牛马baby1 小时前
Springboot 自动装配原理是什么?SPI 原理又是什么?
java·spring boot·后端
小小深1 小时前
了解JVM
java·jvm
Sunlight_7771 小时前
第五章 SQLite数据库:1、SQLite 基础语法及使用案例
java·linux·服务器·jvm·数据库·tcp/ip·sqlite
Starwow1 小时前
微服务之gRPC
后端·微服务·golang
JhonKI1 小时前
【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
java·redis·缓存
何似在人间5752 小时前
SpringAI+DeepSeek大模型应用开发——4 对话机器人
java·机器人·大模型应用开发·spring ai
-曾牛2 小时前
【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码
java·开发语言·人工智能·spring boot·ai·chatgpt
kfepiza2 小时前
HttpSessionListener 的用法笔记250417
java·笔记·servlet·tomcat
冬天vs不冷2 小时前
SpringBoot条件注解全解析:核心作用与使用场景详解
java·spring boot·python