Vert.x cluster

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()));
	        }
	    });
	}

创建另一个项目

扫描二维码关注公众号,回复: 613338 查看本文章
    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的另一个特性-发送到节点是循环的


本期的小实验并没有解决任何实际问题,仅仅是记录我的想法,很高兴浪费你的宝贵时间。



猜你喜欢

转载自blog.csdn.net/zyydecsdn/article/details/80109911