VertX EventBus未在AWS上下文中接收消息



我有一个Java服务在3个不同的ec2实例上运行。它们使用Hazelcast形成一个集群。以下是我的cluster.xml配置的一部分:

<join>
<multicast enabled="false"></multicast>
<tcp-ip enabled="false"></tcp-ip>
<aws enabled="${AWS_ENABLED}">
<iam-role>DEFAULT</iam-role>
<region>us-east-1</region>
<security-group-name>sec-group-name</security-group-name>
<hz-port>6100-6110</hz-port>
</aws>
</join>

以下是发现成功的日志消息:

[3.12.2] (This is the hazelcast version)
Members {size:3, ver:31} [
Member [10.0.3.117]:6100 - f5a9d579-ae9c-4c3d-8126-0e8d3a1ecdb9
Member [10.0.1.32]:6100 - 5799f451-f122-4886-92de-e351704e6980
Member [10.0.1.193]:6100 - 626de40a-197a-446e-a44f-ac456a52d118 this
]

vertxInstance.sharedData()运行良好,这意味着我们可以在实例之间缓存数据。

然而,问题是在使用vertx事件总线向实例发布消息时:

this.vertx.eventBus().publish(EventBusService.TOPIC, memberId);

并且有这个听众:

eventBus.consumer(TOPIC, event -> {
logger.warn("Captured message: {}", event.body());
});

这种配置在本地工作,消费者会收到消息,但一旦部署到AWS,它就不起作用了。

我试着明确地设置主机只是为了测试,但这也不起作用:

VertxOptions options = new VertxOptions();
options.setHAEnabled(true);
options.getEventBusOptions().setClustered(true);
options.getEventBusOptions().setHost("10.0.1.0"); 

我做错了什么?我有什么选择来进一步调试这个问题?

事件总线通信不使用集群管理器,而是直接使用tcp连接

引用本次对话中的内容:https://groups.google.com/g/vertx/c/fCiJpQh66fk

解决方案是显式设置事件总线的公共主机和端口选项:

vertxOptions.getEventBusOptions().setClusterPublicHost(privateIpAddress);
vertxOptions.getEventBusOptions().setClusterPublicPort(5702);

相关内容

  • 没有找到相关文章

最新更新