当前位置: 首页 > 知识库问答 >
问题:

Vertx Eventbus发送节点间失败

索嘉石
2023-03-14

我有一个小演示,演示了Vertx如何使用Hazelcast Cluster Manager通过Eventbus在节点之间发送消息。

到目前为止,我已经成功地使节点相互识别。

Members [2] {
    Member [192.168.150.193]:5701 - 0c8120d8-73dc-4fc2-af6d-16288dbd707a
    Member [192.168.130.41]:5701 - 19239bb1-e7e8-4990-a389-817d6a7d128a this
}

但是,我在集群成员之间的EventBus通信中遇到了一个问题。根据Vertx手册页面。

集群管理器不处理事件总线节点间传输,这是由Vert直接完成的。x与TCP连接。

但是,即使我事先通过以下方式从群集管理器获得群集事件总线:

public static EventBus clusterEB = null;
...
Vertx.clusteredVertx(options, res -> {
        if (res.succeeded()) {
            Vertx vertx = res.result();
            clusterEB = vertx.eventBus();
            vertx.deployVerticle(new DemoVerticle());
        }
    });

当本地节点的主顶点使用该静态事件总线对象向远程节点发送消息时。

eb.send("worker.count", request_count, res -> {
                if (res.succeeded()) {
                    System.out.println("Received reply No." + res.result().body());
                    worker_busy--;
                    System.out.println("WORKER_BUSY = " + worker_busy);
                }
            });

抛出了一个异常:

io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:50509

使用netstat,我发现50509是远程节点eventbus正在监听的端口。因此,我猜测我的配置错过了一些导致Vertx错误的地址,如果我错了,请纠正我。

这些信息是我目前为止研究的,我真的很期待听到你们对这个问题的任何建议。如果您需要更多信息,请随时问我。

p/s:本地节点之间的事件总线通信仍然良好。在Ubuntu上运行的代码(禁用UFW),远程机器是关闭防火墙的Windows(我认为防火墙在这里不是问题,因为节点之间仍然存在tcp连接,可以列出网络中的所有集群成员)

共有2个答案

弘浩博
2023-03-14

对于遇到同样问题的人,希望我的回答能对你有所帮助。

多亏了@Paulo_Lopes的建议,我的问题稍微调一下就解决了。

我必须以编程方式设置群集主机,如下所示:

VertxOptions options = new VertxOptions().setClusterManager(mgr).setClusterHost("192.168.130.21");

Vertex Hazelcast的文件中也有关于此的简要信息:

当运行垂直时。如果x处于群集模式,还应确保垂直。x知道正确的接口。在命令行上运行时,这是通过指定群集主机选项来完成的。。。

但老实说,我认为他们应该把它更容易理解的方式。简而言之,您必须将您的机器IP指定为群集主机,因为群集事件总线将使用该IP并注册一个套接字用于节点间通信。如果没有设置群集主机配置,Vertx将以您的localhost(127.0.0.1)作为IP,通过Vertx发送的每条消息只能到达本地节点。

这就是全部。“希望它能帮助有需要的人,谢谢你,”保罗说。

冯风史
2023-03-14

看起来是垂直的。x为您的主机(127.0.0.1)选择了错误的IP地址,而实际上它们是:

  • 192.168。150.193
  • 192.168。130.41

您可能希望通过添加以下额外的命令行参数来强制每个节点选择正确的IP地址:

-cluster-host 192.168.150.193

对于另一个节点也是如此,具有:

-cluster-host 192.168.130.41
 类似资料:
  • 为空。对如何发送图像有什么建议吗? 谢了。

  • Expressjs框架有一个方法。如果不使用整个框架,我怎么能做到这一点? 我正在使用node-native-zip创建一个归档文件,并希望将其发送给用户。

  • 我有两个节点js应用程序,一个发送post请求,如下所示: 另一个是试图用表达式和正文解析器来处理它: 问题是在接收端我无法检索我正在寻找的json数据。有人知道我错过了什么吗?

  • 我有一个具有必要字段的窗格扩展类。它将是“大门”。 调用控制器从FXML加载节点树,并将其作为子级附加到“gate”对象 然后创建并显示一个以“gate”为根节点的新场景。 新的窗口控制器有一个对FXML根节点(“gate”的直接子节点)的引用,他所需要做的就是在其上使用.getparent()来获取“gate”。 但管他呢!它返回null!我做错了什么?我应该通过FXMLLoader设置一个不同

  • 我在android应用程序中使用nodeJS和mongodb作为后端服务,并使用FCM向用户发送推送通知。为了实现这一点,我在MongoDB上保存了firebase注册令牌。 我想在相应的用户在MongoDb服务器上添加数据时向他们发送推送通知。 这是我在下面添加数据库数据的代码。 现在,一旦数据添加到数据库中,我想向用户发送通知。有人请让我知道如何才能实现所需的任务。任何帮助都将不胜感激。 谢谢

  • 我遇到了一个问题,阻止我启动Cassandra守护进程。 我用的是Cassandra社区2.1.4 我在几个小时前创建了我的集群,它运行得非常好,直到我重启了托管这个节点的azure VM。我的群集使用密码验证。 有什么想法吗? 编辑:我不知道这是否相关,但我试图在重启前删除一个密钥空间,但失败了。(不,我没有尝试删除system_auth keyspace,以防您怀疑) Cassandra日志文