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

在Quarkus中能否用Vert.x EventBus实现独立应用间的消息发布与消费?

跨独立应用使用Vert.x EventBus收发消息

当然可以实现!默认的Vert.x EventBus仅在单个JVM内部生效,所以单应用内收发正常,但跨独立应用必须启用集群模式,让多个Vert.x实例加入同一个集群,这样EventBus才能跨节点路由消息。

实现步骤

1. 添加集群依赖

Vert.x需要集群管理器实现节点发现与消息同步,最常用的是Hazelcast,先在项目中引入对应依赖:

Maven:

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-hazelcast</artifactId>
  <version>你的Vert.x版本号</version>
</dependency>

Gradle:

implementation 'io.vertx:vertx-hazelcast:你的Vert.x版本号'

2. 启动集群模式的Vert.x实例

不能使用普通的Vertx.vertx()初始化,必须通过Vertx.clusteredVertx()启动,它会自动完成集群管理器的初始化:

发布者应用代码:

Vertx.clusteredVertx(new VertxOptions(), asyncResult -> {
  if (asyncResult.succeeded()) {
    Vertx vertx = asyncResult.result();
    EventBus eventBus = vertx.eventBus();
    
    // 每隔1秒向跨应用主题发送消息
    vertx.setPeriodic(1000, timerId -> {
      eventBus.publish("cross-app-demo-topic", "来自应用A的消息");
    });
    System.out.println("应用A(发布者)已加入集群");
  } else {
    System.err.println("启动集群Vert.x失败: " + asyncResult.cause());
  }
});

消费者应用代码:

Vertx.clusteredVertx(new VertxOptions(), asyncResult -> {
  if (asyncResult.succeeded()) {
    Vertx vertx = asyncResult.result();
    EventBus eventBus = vertx.eventBus();
    
    // 订阅跨应用主题
    eventBus.consumer("cross-app-demo-topic", message -> {
      System.out.println("应用B收到消息: " + message.body());
    });
    System.out.println("应用B(消费者)已加入集群");
  } else {
    System.err.println("启动集群Vert.x失败: " + asyncResult.cause());
  }
});

3. 关键注意事项

  • 集群配置一致:所有应用必须加入同一个集群组(默认是__vertx.DEFAULT__,如果自定义集群配置,要保证所有应用的配置完全匹配)
  • 网络互通:确保两个应用所在机器网络连通,防火墙需开放集群管理器的端口(比如Hazelcast默认使用5701端口)
  • 消息序列化:如果发送自定义对象,必须让对象实现java.io.Serializable,或者自定义MessageCodec处理序列化/反序列化逻辑
  • 集群管理器可选:除了Hazelcast,还可以选择Infinispan、ZooKeeper等,根据部署环境选择对应的Vert.x集群依赖

常见问题排查

如果跨应用仍无法收发消息,优先检查以下几点:

  1. 查看日志确认两个应用都成功加入了同一个集群
  2. 验证主题名称完全一致(EventBus主题大小写敏感)
  3. 先测试发送简单类型消息(如String),排除自定义对象的序列化问题
  4. 用telnet等工具测试集群端口的网络连通性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:37:31