本文旨在开发一个用编码方式启动Vert.x集群demo。编码方式启动Vert.x集群可以在eclipse中启动调试程序。
代码如下。
package com.wof.realtime.apigateway;
import com.hazelcast.config.Config;
import com.hazelcast.config.JoinConfig;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.spi.cluster.ClusterManager;
import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager;
/**
* 以编码方式启动群集化MainVerticle,
*
* @author lhx
*
*/
public class RunApiGateway {
public static void main(String[] args) {
// Hazelcast配置类
Config cfg = new Config();
// 关闭UDP组播,采用TCP进行集群通信。
JoinConfig joinConfig = cfg.getNetworkConfig().getJoin();
joinConfig.getMulticastConfig().setEnabled(false);
joinConfig.getTcpIpConfig().setEnabled(true);
joinConfig.getTcpIpConfig().addMember("192.168.1.100,192.168.1.132,192.168.1.130");// 有多个目标节点,就需要写多少地址。
// 这里指定所用通信的网卡(在本机多个网卡时如不指定会有问题,无论有无多个网卡最好设置一下。)
cfg.getNetworkConfig().getInterfaces().setEnabled(true);
cfg.getNetworkConfig().getInterfaces().addInterface("192.168.1.*");
// 申明集群管理器
ClusterManager mgr = new HazelcastClusterManager(cfg);
VertxOptions options = new VertxOptions().setClusterManager(mgr);
options.setClustered(true);
options.setClusterHost("192.168.1.100");//这个一定要设置(在本机有多个网卡的时候,如果不设置,会收不到消息。)
// 集群化vertx
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
Vertx vertx = res.result();
vertx.deployVerticle(ApiGatewayVerticle.class.getName());
System.out.println("Api Gateway : cluster succeeded");
} else {
res.cause().printStackTrace();
}
});
}
}