gpt4 book ai didi

java - 无法通过网络发送 Vert.x 消息

转载 作者:行者123 更新时间:2023-11-30 07:15:24 27 4
gpt4 key购买 nike

我正在尝试将集群 vert.x 中的消息发送到其他主机。在一台计算机上运行以下代码两次是可行的,但如果我使用两台主机,则会失败(未收到消息)。我将 Vert.x 3.3.1 与 Hazelcast 结合使用。我附加了在单独主机上运行的从属端的日志,看起来它们确实正在寻找并相互连接。

感谢您的任何意见!

worker

public class WorkerVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
System.out.println("Deployed " + getClass().getName());
vertx.eventBus().<String> consumer("TEST_ADDRESS", this::doWork);
}
private void doWork(Message<String> msg) {
String workItemString = msg.body();
System.out.println("Got Work:" + workItemString);
}
}

主类

public class Starter {
Vertx vertx;

public Starter(boolean slave) {
VertxOptions options = new VertxOptions();
options.setClustered(true);
Future<Void> completer1 = Future.future();
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
vertx = res.result();
completer1.complete();
System.out.println("Opened clustered vertx");
} else {
System.out.println("Failed: " + res.cause() + ". Quitting now.");
System.exit(-1);
}
});
completer1.setHandler(new Handler<AsyncResult<Void>>() {
@Override
public void handle(AsyncResult<Void> event) {
if (slave) {
System.out.println("Deploying worker");
vertx.deployVerticle(WorkerVerticle.class.getName());
} else {
System.out.println("publishing message");
vertx.eventBus().publish("TEST_ADDRESS", "Test");
}
}
});
}
}

在单独主机上运行的从属日志示例

INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3] Accepting socket connection from /192.168.2.3:55878
Jul 21, 2016 10:20:43 AM com.hazelcast.nio.tcp.TcpIpConnectionManager
INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3] Established socket connection between /192.168.2.191:5701 and /192.168.2.3:55878
Jul 21, 2016 10:20:44 AM com.hazelcast.cluster.ClusterService
INFORMATION: [192.168.2.191]:5701 [dev] [3.6.3]

Members [2] {
Member [192.168.2.191]:5701 this
Member [192.168.2.3]:5701
}

最佳答案

Hazelcast 似乎工作正常(您的日志显示两个节点都发现了自己,因为您有 2 个成员)。可能发生的情况是主机 JVM 上的主机名解析返回一些内部 IP 地址,然后每个节点无法连接到其他节点。

为了指定正确的设备,您可以使用以下命令:

java -jar vertxtest.jar -cluster -cluster-host <your.ip.address>

请注意,vert.x 在启动集群时会选择一个空闲端口,因此您应该放松防火墙,或者如果您想更安全,还可以指定 vert.x 可以使用哪个端口(除了来自 hazelcast 的 5700 端口):

java -jar vertxtest.jar -cluster -cluster-host <your.ip> -cluster-port 5800

关于java - 无法通过网络发送 Vert.x 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com