【问题标题】:VertX EventBus not receiving messages in AWS contextVertX EventBus 未在 AWS 上下文中接收消息
【发布时间】: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


【解决方案1】:

eventbus 通信不使用集群管理器,而是直接 tcp 连接

引用此对话:https://groups.google.com/g/vertx/c/fCiJpQh66fk

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

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

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2015-03-09
    相关资源
    最近更新 更多