首先 我们上文 已经知道了 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 接口所在的 包即可
这样就能远程调用啦