微服务中不同服务使用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 接口所在的 包即可

这样就能远程调用啦

相关推荐
邪修king几秒前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料27 分钟前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y1 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧6 小时前
C#:空合并运算符
java·前端·数据库
吴建旭 智宅焕6 小时前
智能家居交付计价模型的设计与实现:按时间计费与交付确定性架构
架构·智能家居
布吉岛的石头6 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记6 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐7 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵7 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨7 小时前
spring auth 核心流程详解
java·后端·spring