Vertx3 - EventBus 在集群中不工作
Vertx3 - EventBus not working in a cluster
我正在使用 vertx3。我尝试使用版本 3.0.0 - 3.1.0 - 3.2.0-SNAPSHOT 并且所有版本都在发生。
为了简化问题,我创建了 2 个简单的 Verticles。第一个充当消息的消费者,第二个通过事件总线发送消息。
问题是 eventBus 看起来不工作,我在集群中 运行s 时超时。
我不明白为什么第二个节点看起来像加入集群等等
我在这里添加代码。
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?");
});
});
}
}
我正在 运行 与
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>
和这个 cluster.xml 在 SecondVerticle
<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>
当我 运行 第一个 Verticle 和第二个 Verticle 之后
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?
当 运行ning 在不同的机器上时会发生这种情况,但当 运行ning 在同一台机器上时一切正常。
它们在 CentOS 中 运行ning,禁用防火墙,内部 IP 之间的通信正常....所以一些想法?
谢谢,
最后我设法使它适用于不同的配置,使用 tcp-ip 和多播。
基本上主要的问题是因为被防火墙拦截或者是没有启用多播。
我遇到的另一个问题是当服务器有多个网络接口时,所以必须在 cluster.xml
中指定使用哪一个
我创建了一个 github 存储库,其中包含 3 种不同的配置,最终在集群中运行良好,希望对您有所帮助。
我正在使用 vertx3。我尝试使用版本 3.0.0 - 3.1.0 - 3.2.0-SNAPSHOT 并且所有版本都在发生。
为了简化问题,我创建了 2 个简单的 Verticles。第一个充当消息的消费者,第二个通过事件总线发送消息。
问题是 eventBus 看起来不工作,我在集群中 运行s 时超时。
我不明白为什么第二个节点看起来像加入集群等等
我在这里添加代码。
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?");
});
});
}
}
我正在 运行 与
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>
和这个 cluster.xml 在 SecondVerticle
<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>
当我 运行 第一个 Verticle 和第二个 Verticle 之后
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?
当 运行ning 在不同的机器上时会发生这种情况,但当 运行ning 在同一台机器上时一切正常。 它们在 CentOS 中 运行ning,禁用防火墙,内部 IP 之间的通信正常....所以一些想法?
谢谢,
最后我设法使它适用于不同的配置,使用 tcp-ip 和多播。
基本上主要的问题是因为被防火墙拦截或者是没有启用多播。
我遇到的另一个问题是当服务器有多个网络接口时,所以必须在 cluster.xml
中指定使用哪一个我创建了一个 github 存储库,其中包含 3 种不同的配置,最终在集群中运行良好,希望对您有所帮助。