3

我正在使用vertx3。我尝试使用 3.0.0 - 3.1.0 - 3.2.0-SNAPSHOT 版本,所有这些都在发生。

为了简化问题,我创建了 2 个简单的 Verticle。第一个充当消息的消费者,第二个通过事件总线发送消息。

问题是 eventBus 看起来不起作用,并且在集群中运行时我遇到超时。

我不明白为什么看起来第二个节点加入了集群,等等。

我在这里添加代码。

public class FirstVerticle extends AbstractVerticle {
private final Logger log = LoggerFactory.getLogger(getClass());

@Override
public void start() {
    getVertx().eventBus().consumer("test-service", message -> {
        log.info(String.format("test-Service receive: %s", message));
        message.reply("ok");
    }).completionHandler(event -> {
        if(event.succeeded()) log.info("complete handler");
        else log.info("failed");
    });
    log.info("Done initializing");
}

}

public class SecondVerticle extends AbstractVerticle {
private final Logger log = LoggerFactory.getLogger(getClass());

@Override
public void start() {
    log.info("Done initializing test");

    getVertx().setPeriodic(2000L, id -> {
        log.info("sending message test");
        getVertx().eventBus().send("test-service", "hi", response -> {
            if(response.succeeded()) log.info("success");
            else log.info("error?");
        });
    });
}

}

我正在运行verticles

java -jar counter-service-1.0-SNAPSHOT-fat.jar -cluster -cluster-host 192.168.112.9

第二个是:

java -jar test-service-1.0-SNAPSHOT-fat.jar -cluster -cluster-host 192.168.112.10

我在 FirstVerticle 中有以下 cluster.xml

<network>
    <port auto-increment="true" port-count="10000">5701</port>
    <outbound-ports>
        <ports>0</ports>
    </outbound-ports>
    <join>
        <multicast enabled="false">
            <multicast-group>224.2.2.3</multicast-group>
            <multicast-port>54327</multicast-port>
        </multicast>
        <tcp-ip enabled="true" connection-timeout-seconds="10">
            <interface>192.168.112.9</interface>
            <interface>192.168.112.10</interface>
        </tcp-ip>
    </join>
    <interfaces enabled="true">
        <interface>192.168.112.*</interface>
    </interfaces>
</network>

和 SecondVerticle 中的这个 cluster.xml

<network>
    <port auto-increment="true" port-count="10000">5701</port>
    <outbound-ports>
        <ports>0</ports>
    </outbound-ports>
    <join>
        <multicast enabled="false">
            <multicast-group>224.2.2.3</multicast-group>
            <multicast-port>54327</multicast-port>
        </multicast>
        <tcp-ip enabled="true" connection-timeout-seconds="10" >
            <interface>192.168.112.9</interface>
            <interface>192.168.112.10</interface>
        </tcp-ip>
    </join>
    <interfaces enabled="true">
        <interface>192.168.112.*</interface>
    </interfaces>
</network>

当我运行第一个垂直时,在第二个之后我有

Members [2] {

Member [192.168.112.9]:5701 this

Member [192.168.112.10]:5701

}

并从第二个节点

Members [2] {

Member [192.168.112.9]:5701

Member [192.168.112.10]:5701 this

}

但我只从第二个节点

sending message test 

10秒后

Message reply handler timed out as no reply was received - it will be removed 

error? 

当在不同的机器上运行时会发生这种情况,但是当在同一台机器上运行时一切正常。它们在 CentOS 中运行,防火墙被禁用,内部 IP 之间的通信很好......所以有什么想法吗?

谢谢,

4

1 回答 1

6

最后,我设法使它适用于不同的配置,使用 tcp-ip 和多播。

基本上,主要问题是由于防火墙的阻止或未启用多播。

我遇到的问题之一是服务器具有多个网络接口时,因此必须在 cluster.xml 中指定使用哪一个

我创建了一个 github 存储库,其中包含 3 种不同的配置,最终在集群中运行良好,希望对您有所帮助。

https://github.com/mustaine/vertx3-ping-pong

于 2015-10-12T15:17:45.017 回答