集群模式vertx启动方式
集群模式vertx启动方式
其实vertx的启动方式只有两种,一种是自己创建Vertx对象;一种是使用Vertx Launcher。官方的命令行工具其实也是一个Vertx Launcher,但添加了对多种语言的支持。其lib目录包含了vertx框架的全部依赖库,可以部署多种语言编写的verticle。
Hazelcast集群管理器:
vertx默认使用Hazelcast,默认集群管理器配置文件也是Hazelcast的配置文件。启用集群模式时不需要额外单独部署Hazelcast,只需要将vertx-hazelcast添加到classpath即可,vertx会自动启动它。vertx启动集群时会先查找classpath下的cluster.xml配置文件,找不到就会使用default-cluster.xml作为配置文件。
这里使用Hazelcast进行演示。
1. 编写两个verticle作为示例。
SenderVerticle
import io.vertx.core.AbstractVerticle;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.json.JsonObject;
public class SenderVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
EventBus eventBus = vertx.eventBus();
JsonObject msg = new JsonObject().put("message_from_sender_verticle", "Hello, Consumer !");
vertx.setPeriodic(3000, index -> {
eventBus.request("receiver", msg, res -> {
if (res.succeeded()) {
JsonObject reply = (JsonObject) res.result().body();
System.out.println("received reply: " + reply.getValue("reply"));
}
});
});
}
}
ReceiverVerticle
import io.vertx.core.AbstractVerticle;
import io.vertx.core.eventbus.EventBus;
import io.vertx.core.eventbus.MessageConsumer;
import io.vertx.core.json.JsonObject;
public class ReceiverVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
EventBus eventBus = vertx.eventBus();
MessageConsumer<JsonObject> consumer = eventBus.consumer("receiver");
consumer.handler(message -> {
JsonObject jsonMessage = message.body();
System.out.println(jsonMessage.getValue("message_from_sender_verticle"));
JsonObject jsonReply = new JsonObject().put("reply", "666 !");
message.reply(jsonReply);
});
}
}
2. 使用vertx命令行工具
vertx命令行工具官网首页就可以下载,下载之后将里面的bin路径添加到path环境变量就可以使用了。注意路径中不能包含中文和空格。使用集群模式时,需要添加集群配置。
-
修改配置文件
将config目录下的default-cluster.xml复制一份,重命名为cluster.xml,找到network项进行配置。
<tcp-ip enabled="true"> <interface>192.168.1.27</interface> <interface>192.168.1.28</interface> <interface>192.168.1.29</interface> </tcp-ip>
-
启动verticle
打开两个终端,分别运行下面两条命令。
vertx run SenderVerticle.java -cluster
vertx run ReceiverVerticle.java -cluster
2. 直接在main函数启动
需要保证classpath中有cluster.xml,否则vertx会使用默认集群配置。
public static void main(String[] args) {
HazelcastClusterManager clusterManager = new HazelcastClusterManager();
VertxOptions options = new VertxOptions().setClusterManager(clusterManager);
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
Vertx vertx = res.result();
DeploymentOptions deploymentOptions = new DeploymentOptions();
vertx.deployVerticle(ReceiverVerticle::new, deploymentOptions);
System.out.println("receiver verticle deployed");
}
});
}
3. 使用Gradle脚本启动
编写两个task即可,主类用Vertx Launcher,可以添加命令行参数来配置,这里的命令行参数和vertx命令行工具的参数一样。
task RunVerticleSender(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'io.vertx.core.Launcher'
args = ['run', 'cn.kui.test.cluster.SenderVerticle', '-cluster', '-cluster-host=127.0.0.1']
}
task RunVerticleReceiver(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'io.vertx.core.Launcher'
args = ['run', 'cn.kui.test.cluster.ReceiverVerticle', '-cluster', '-cluster-host=127.0.0.1']
}
更详细的说明请看官方文档:https://vertx.io/docs/vertx-hazelcast/java/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)