Vert.x - Verticles和服务之间的差异

时间:2018-04-09 08:24:35

标签: java vert.x vertx-verticle

几天前我们开始使用vert.x.阅读文档(使用Eclipse Vert.x for Java开发人员进行异步编程的温和指南 - https://vertx.io/docs/guide-for-java-devs/)我理解了Verticle的概念。 我没有理解的是" service"和"服务代理":

"这是服务代理的主要目的。它允许您在事件总线上公开服务,因此,只要知道发布服务的地址,任何其他Vert.x组件都可以使用它。 使用包含异步模式后面的方法的Java接口描述服务。在引擎盖下,消息在事件总线上发送以调用服务并获得响应。但为了便于使用,它会生成一个可以直接调用的代理"

但是,如何将单个服务链接到Verticle&事件循环概念? 它是属于一个单独的独立Verticle并且它有自己独立的事件循环还是属于特定的Verticle? 我应该在何时何地注册服务?在Verticle start方法内部或仅在main方法中?

谢谢!

1 个答案:

答案 0 :(得分:3)

粒度级别相当自由,但基本上,Verticle可以使用不同的方式(例如here's three common way)公开一个或多个服务(实现具有业务目的的单例)。

eventbus是一种允许Verticle在消息队列模型上异步通信的本机方式。

因此,Verticle可以通过监听一个或多个eventbus的通道(并在此通道上回复)来公开一个或多个服务,并且可以通过在事件总线上的其他通道上发送消息来调用其他一些Verticle公开的服务。

P.S:

1)无需使用vert.x编写main方法(您可以使用胖罐中的io.vertx.core.Launchervertx可执行文件来运行主Verticle)。< / p>

2)您可以使用胖罐或io.vertx.core.Launcher可执行文件中的vertx类将所有Verticle作为单独的pid启动,或者您可以在主Verticle内启动多个Verticle,以便它们共享同一个事件默认情况下循环(但您也可以根据:https://vertx.io/docs/vertx-core/java/#worker_verticles)声明一个工作池并使用“worker verticles”。