vertx微服务集群
有四种方式
我目前使用了ZK,动物园
下载后进入bin,运行zKServer
创建项目
mkdir hello-microservice-message cd hello-microservice-message mvn io.fabric8:vertx-maven-plugin:1.0.5:setup \ -DprojectGroupId=io.vertx.microservice \ -DprojectArtifactId=hello-microservice-message \ -Dverticle=io.vertx.book.message.HelloMicroservice
增加依赖
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-zookeeper</artifactId> <version>3.5.1</version> </dependency>
修改HelloMicroservice.java,start改为
@Override public void start() { // Receive message from the address 'hello' vertx.eventBus().<String>consumer("hello", message -> { JsonObject json = new JsonObject() .put("served-by", this.toString()); // Check whether we have received a payload in the // incoming message if (message.body().isEmpty()) { message.reply(json.put("message", "hello")); } else { System.out.println(message.body()); message.reply(json.put("message", "hello3"+ message.body())); } }); }
创建另一个项目
mkdir hello-consumer-microservice-message cd hello-consumer-microservice-message mvn io.fabric8:vertx-maven-plugin:1.0.5:setup \ -DprojectGroupId=io.vertx.microservice \ -DprojectArtifactId=hello-consumer-microservice-message \ -Dverticle=io.vertx.book.message.HelloConsumerMicroservice \ -Ddependencies=rx
增加依赖
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-zookeeper</artifactId> <version>3.5.1</version> </dependency>
HelloConsumerMicroservice.java的start改为
@Override public void start() { vertx.createHttpServer() .requestHandler( req -> { System.out.println(this.toString()); EventBus bus = vertx.eventBus(); Single<JsonObject> obs1 = bus .<JsonObject>rxSend("hello", "Luke") .map(Message::body); Single<JsonObject> obs2 = bus .<JsonObject>rxSend("hello", "Leia") .map(Message::body); Single .zip(obs1, obs2, (luke, leia) -> new JsonObject() .put("Luke", luke.getString("message") + " from " + luke.getString("served-by")) .put("Leia", leia.getString("message") + " from " + leia.getString("served-by")) ) .subscribe( x -> req.response().end(x.encodePrettily()), t -> { t.printStackTrace(); req.response().setStatusCode(500) .end(t.getMessage()); } ); }) .listen(8082); }
两个项目都打包
mvn clean package
都以集群模式运行
java -jar name.jar -ha
这个时候ZK的窗口会看到发现了节点。ZK和vert.x的ZK依赖host和port都是默认的,所以会自动注册节点。
-ha是高依赖模式,会自动启用集群模式-cluster
如果想增加hello-microservice-message的节点,打开新的命令行继续运行
java -jar name.jar -ha
经过我的测试发现增加hello-consumer-microservice-message是没用的。
每一次调用localhost:8082都会发送两个请求到hello-microservice-message节点。
我们发现event loop的一个特性,就是,原来发送到哪个节点后续还会发送到那个节点。
然后我又增加了一个节点,发现了event loop的另一个特性-发送到节点是循环的
本期的小实验并没有解决任何实际问题,仅仅是记录我的想法,很高兴浪费你的宝贵时间。