集群模式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环境变量就可以使用了。注意路径中不能包含中文和空格。使用集群模式时,需要添加集群配置。

  1. 修改配置文件

    将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>
    
  2. 启动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/

posted @   烟酒忆长安  阅读(2755)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示