可伸缩性是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 的事件总线将消息发送到可用的实例,从而在监听同样的地址的不同节点之间平衡负载。
因此通过事件总线,我们具有了可伸缩性。