自学内容网 自学内容网

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

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

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

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

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

业务逻辑分析

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

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

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

  @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模块中 引入依赖 

  <!--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 接口所在的 包即可 

 

这样就能远程调用啦


原文地址:https://blog.csdn.net/2202_75352238/article/details/139844330

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!