可伸缩性是HTTP版本的微服务不具有的特性之一。因为该微服务针对的是微服务的特定实例(它使用硬编码的URL),所以它没有提供我们需要的可伸缩性。但是现在我们使用消息,将其发送到某个地址(译者注:可以以邮箱的类比),这改变了游戏。让我们看看这个微服务系统的行为。

记住之前执行的输出。返回的JSON对象显示这个verticle计算了hello消息。我们在输出中加入了server-by字段,而打印的输出均出自同一个verticle,这表明他们被同一个verticle所消费。我们知道这是因为我们只有一个单独的实例运行的原因。现在让我们看看同时运行两个实例的情况。

mvn clean package

然后,在hello-microservice-message目录中打开两个不同的终端,并发出以下命令(在每个终端):

java -jar target/hello-microservice-message-1.0-SNAPSHOT.jar \
    --cluster -Djava.net.preferIPv4Stack=true

这将启动Hello microservice的两个实例。回到浏览器,刷新页面,你会看到如下内容:

{
"Luke" : "hello Luke from ...HelloMicroservice@16d0d069",
"Leia" : "hello Leia from ...HelloMicroservice@411fc4f"
}

我们现在使用了两个Hello服务。Vert.x集群连接不同的节点,事件总线也是集群的。由于事件总线的循环,这个Vert.x 的事件总线将消息发送到可用的实例,从而在监听同样的地址的不同节点之间平衡负载。

因此通过事件总线,我们具有了可伸缩性。

results matching ""

    No results matching ""