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

标签 java hazelcast vert.x

我正在尝试将集群 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/

相关文章:

apache-flink - wordcount 测试显示 Flink 运行缓慢

java - Vert.x JWT 身份验证提供禁止访问

java - 如何使用 Hibernate 作为非阻塞 ORM 与 Vert.x

Java将数组复制到自身

java - 如何使用 Spring 的 Java Configuration 指定 Filter 执行顺序?

java - HazelcastSerializationException : Failed to serialize Interface-based Projections

hazelcast - EntryProcessor 序列化的行为是什么?

java - Docker CMD + ENTRYPOINT 与命令行行为不匹配

java - 是否不鼓励在 Java EE 容器中使用 Java 8 并行流?

java - 如何获取用户输入中给出的位数