集群模式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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM