RuoYi-Cloud 新建微服务并实现服务间调用(OpenFeign 实战)

1. 新建微服务模块 test1

在 ruoyi-modules 目录下新建一个名为 test1 的 Maven 模块,参考现有模块(如 ruoyi-system)的目录结构和配置方式,完成基础搭建。

新建模块后,需要在 ruoyi-modules/pom.xml 中注册该子模块,并在 test1 的 pom.xml 中引入所需依赖,包括 ruoyi-common-security、ruoyi-common-log、ruoyi-common-swagger 等公共模块,以及 OpenFeign 相关依赖。

同时需要创建 test1 模块的启动类、配置文件(bootstrap.yml),并在 Nacos 中注册服务,确保服务能够正常启动并注册到注册中心。

2. OpenFeign 接口调用

2.1 修改 HeaderInterceptor 传递 Token

在 HeaderInterceptor 的 preHandler() 方法中增加 Token 传递逻辑,确保 Token 在服务调用期间不断传递:

java 复制代码
// feign接口测试,增加token。可以让token在服务调用期间不断传
SecurityContextHolder.setToken(ServletUtils.getHeader(request, SecurityConstants.TOKEN));

其中 SecurityContextHolder 中的相关方法如下:

java 复制代码
public static void setToken(String token) {
    set(SecurityConstants.TOKEN, token);
}
public static String getToken() {
return get(SecurityConstants.TOKEN);
}

对应的常量定义:

java 复制代码
/**
 * TOKEN
 */
public static final String TOKEN = "Authorization";

2.2 新增 API 接口

在 RemoteUserService 中新增接口方法:

java 复制代码
@GetMapping("/user/list")
public TableDataInfo getUserList(
    @RequestHeader(SecurityConstants.DETAILS_USER_ID) Long userId,
    @RequestHeader(SecurityConstants.DETAILS_USERNAME) String userName,
    @RequestHeader(SecurityConstants.USER_KEY) String userKey,
    @RequestHeader(SecurityConstants.TOKEN) String token
);

在 RemoteUserFallbackFactory 中新增对应的降级实现:

java 复制代码
@Override
public TableDataInfo getUserList(Long userId, String userName, String userKey, String token) {
    TableDataInfo tableDataInfo = new TableDataInfo();
    tableDataInfo.setMsg("获取用户列表失败:" + throwable.getMessage());
    return tableDataInfo;
}

注意:参数中的 TOKEN 用于鉴权中获取用户逻辑,其他三个参数仅用于演示。

2.3 test1 下新增测试 Controller

在 test1 模块中新增测试 Controller:

java 复制代码
@RestController
@RequestMapping("/test")
public class SysTestController extends BaseController {
@Autowired
private RemoteUserService remoteUserService;
/**
获取当前用户信息
*/
@GetMapping("/getUserList")
public void info() {
TableDataInfo userList = remoteUserService
.getUserList(SecurityContextHolder.getUserId(),
SecurityContextHolder.getUserName(),
SecurityContextHolder.getUserKey(),
SecurityContextHolder.getToken());
System.out.println(JSON.toJSONString(userList));
}
}

3. 设置网关路由

进入 Nacos 中的 ruoyi-gateway-dev.yml 文件,新增如下路由配置:

yaml 复制代码
# test1模块
- id: ruoyi-test1
  uri: lb://ruoyi-test1
  predicates:
    - Path=/test/**
  filters:
    - StripPrefix=1

4. 测试验证

使用 Postman 新建 GET 请求:

复制代码
localhost:8080/test/test/getUserList

报文头设置:

复制代码
authorization=Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6Ijk3ZDczNjZlLTQ5MDgtNGNjZS1hZGZiLWI0YjI5N2RlZWQ3MiIsInVzZXJuYW1lIjoiYWRtaW4ifQ.GSfaRh77PR0wA0RbmGtqycRqRNr8IoX_JCkgqmpE-qwb3DrO2naKMK13Cyp8KoY7Cg-xvUYAH9AakgC7j0l3tw

其中 Token 值取自 admin 登录后的 Token。请求成功即表示服务间调用链路已打通。

相关推荐
const_qiu1 小时前
第四章 06:4.6 统一入口 —— analyze() 能力收束
java·人工智能
她的男孩1 小时前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
鬼手点金1 小时前
如何选择模型
java·前端·人工智能·git·深度学习
古法老登瞎折腾1 小时前
大数据智能运维实战(三):实现第一个运维 MCP 工具——查询节点与组件状态
java·大数据·运维·人工智能·spring ai·mcp
小蒜学长1 小时前
基于数据挖掘的京东商城商品推荐系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·推荐系统·个性化推荐
IT研究室2 小时前
最新计算机毕业设计选题推荐-基于spring boot的医院体检管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
有同事要进步2 小时前
Leecode第68题:x的平方根
java·数据结构·算法
摇滚侠2 小时前
使用 VSCode 开发 Java 经验分享
java·经验分享·vscode
吹什么轩2 小时前
linux系统复习:进程优先级与O(1)调度
java·linux·算法