You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vert.x中实现JS verticle与Java verticle之间的通信?

JS Vert.x Verticle 与 Java Verticle 连通方案

Vert.x 本身为多语言架构,不同语言编写的 Verticle 底层共享同一个 Vert.x 实例,连通不需要额外引入跨语言调用依赖,直接使用 Vert.x 原生能力即可实现,以下是两种常用的实现方式:

方式1:通过 Event Bus 通信(最常用,松耦合推荐)

Event Bus 是 Vert.x 内置的分布式通信组件,JS 和 Java 侧的调用逻辑完全对齐,不需要感知对方的实现语言。

  • Java 侧操作示例:
    // Java Verticle 监听JS侧发来的请求示例
    vertx.eventBus().consumer("com.example.service.getUser", message -> {
        // 接收JS侧传递的参数
        String userId = (String) message.body();
        // 业务逻辑处理完成后返回结果
        message.reply("{\"name\":\"张三\",\"id\":" + userId + "}");
    });
    
    // Java Verticle 主动发消息给JS侧示例
    vertx.eventBus().request("com.example.js.log", "需要记录的日志内容", ar -> {
        if(ar.succeeded()) {
            System.out.println("JS侧处理完成: " + ar.result().body());
        }
    });
    
  • JS 侧操作示例(ES4X 环境):
    // JS Verticle 监听Java侧消息示例
    vertx.eventBus().consumer('com.example.js.log', message => {
      console.log('收到Java侧消息:', message.body())
      message.reply('日志记录完成')
    })
    
    // JS Verticle 主动调用Java侧服务示例
    vertx.eventBus().request('com.example.service.getUser', '12345')
      .then(res => {
        console.log('Java侧返回结果:', res.body())
      })
      .catch(err => {
        console.error('调用失败:', err)
      })
    

注意:如果需要传递自定义对象,建议统一用JSON格式序列化,避免跨语言类型兼容问题

方式2:共享本地数据(适合同进程内高频数据交互)

如果两个 Verticle 部署在同一个 Vert.x 实例进程内,可以通过共享 Map、共享 LocalData 直接传递数据:

  • Java 侧存数据:
    // 写入全局共享Map
    vertx.sharedData().getLocalMap("commonCache").put("systemConfig", configObj);
    
  • JS 侧取数据:
    // 从共享Map读取数据
    const commonCache = vertx.sharedData().getLocalMap('commonCache')
    const systemConfig = commonCache.get('systemConfig')
    

部署注意事项

  • 如果你用 ES4X 启动项目,部署 Java 编写的 Verticle 时,需要把 Java 侧编译好的 jar 包放到项目的 classpath 下,部署时直接指定全限定类名即可:
    // ES4X 中部署Java Verticle示例
    vertx.deployVerticle('com.example.MyJavaVerticle')
      .then(deploymentId => {
        console.log('Java Verticle 部署成功,ID:', deploymentId)
      })
    
  • 如果是 Java 项目启动,要部署 JS Verticle,需要把 ES4X 相关依赖引入到 Java 项目的 pom/gradle 依赖中,再指定 JS 文件路径部署即可。

内容的提问来源于stack exchange,提问作者negi_bb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:09:06