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

这样就能远程调用啦

相关推荐
卡卡卡卡罗特27 分钟前
naocs注册中心,配置管理,openfeign在idea中实现模块间的调用,getway的使用
java·开发语言
星迹日31 分钟前
Java: 数据类型与变量和运算符
java·开发语言·经验分享·笔记
南浔Pyer2 小时前
AI驱动的Java开发框架:Spring AI Alibaba实战部署教程
java·人工智能·spring boot·spring·maven·idea
神的孩子都在歌唱3 小时前
行为设计模式 -模板方法模式- JAVA
java·设计模式·模板方法模式
Thomas_YXQ4 小时前
Unity3D PostLateUpdate为何突然占用大量时间详解
开发语言·数码相机·游戏·unity·架构·unity3d
Dylanioucn5 小时前
【分布式微服务云原生】详细介绍下dubbo和springcloud所能支持的微服务特性,为啥能支持的技术原理,以及适用的业务场景,并对两者各方面做个详细的比较
分布式·微服务·云原生
Satan7125 小时前
【Java】虚拟机(JVM)内存模型全解析
java·开发语言·jvm
Thomas_YXQ5 小时前
Unity3D 中构建行为树插件详解
游戏·unity·架构·unity3d·游戏开发
远望樱花兔6 小时前
【d54_2】【Java】【力扣】142.环形链表
java·leetcode·链表
IT学长编程6 小时前
计算机毕业设计 助农产品采购平台的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·助农产品采购平台