我正在尝试将群集vert.x中的消息发送到其他主机。在一台计算机上运行以下代码两次,但如果我使用两台主机,它将失败(未收到消息)。我使用带有Hazelcast的Vert.x 3.3.1。我在一个单独的主机上添加了从属端的日志,看起来它们似乎正在寻找并相互连接。
我感谢任何意见!
工人
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);
}
}
Mainclass
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
}
答案 0 :(得分:1)
似乎Hazelcast工作正常(您的日志显示两个节点都发现自己,因为您有2个成员)。可能发生的是主机JVM上的主机名解析返回一些内部IP地址,然后每个节点都无法连接到其他节点。
要指定正确的设备,您可以使用以下命令:
cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
请注意,vert.x将在启动群集时选择一个空闲端口,因此您应该放松防火墙,或者如果您想要更安全,请指定vert.x使用哪个端口(除了来自hazelcast的5700):
java -jar vertxtest.jar -cluster -cluster-host <your.ip.address>