2

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

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

但是,单个服务如何与 Verticle 和事件循环概念相关联?它是属于一个单独的独立 Verticle 并且它有他单独的事件循环还是属于一个特定的 Verticle?我应该在何时何地注册服务?在 Verticle 的 start 方法中还是在 main 方法中?

谢谢!

4

1 回答 1

4

粒度级别相当自由,但基本上,一个 Verticle 可以以不同的方式公开一个或多个服务(具有业务目的的单例实现接口)(这里以三种常用方式为例)。

事件总线是一种允许 Verticle 在消息队列模型上异步通信的本地方式。

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

PS:

1) 无需main使用 vert.x 编写方法(您可以使用io.vertx.core.Launcherfat jar 内部或vertx可执行文件来运行您的主 verticle)。

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

于 2018-04-09T09:39:04.457 回答