【发布时间】:2022-08-05 20:27:44
【问题描述】:
我有一个在 3 个不同的 ec2 实例上运行的 Java 服务。它们使用 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\");
我做错了什么以及进一步调试此问题的选项是什么?
-
ec2 实例的防火墙/安全组是否设置正确,即允许在 eventbus 和 hazelcast 端口上传入/传出?
-
@AsadAwadia 是的,安全组在测试时可以接受所有流量。
标签: java amazon-web-services vert.x vertx-eventbus