我们几天前开始使用 vert.x。阅读文档(适用于 Java 开发人员的 Eclipse Vert.x 异步编程的温和指南 - https://vertx.io/docs/guide-for-java-devs/)我理解了 verticle 概念。 我不明白的是“服务”和“服务代理”的概念:
“这是服务代理的主要目的。它允许您在事件总线上公开服务,因此,任何其他 Vert.x 组件只要知道该服务所在的地址就可以使用它发表。 服务通过包含遵循异步模式的方法的 Java 接口(interface)进行描述。在底层,消息在事件总线上发送以调用服务并获取响应。但为了方便使用,它会生成一个代理,您可以直接调用”
但是,单个服务如何链接到 verticle 和事件循环概念? 它是否属于一个单独的独立 verticle,并且它有独立的事件循环,还是属于一个特定的 verticle? 我应该何时何地注册服务?在 verticle start 方法中还是简单地在 main 方法中?
谢谢!
最佳答案
粒度级别相当自由,但基本上,一个 verticle 可以通过不同的方式公开一个或多个服务(具有业务目的的单个实现接口(interface))(例如 here's three common way)。
事件总线是一种原生方式,允许 Verticle 在消息队列模型上进行异步通信。
因此,Verticle 可以通过监听一个或多个 eventbus 的 channel (并在此 channel 上进行回复)来公开一项或多项服务,并且可以通过在事件总线上的其他 channel 上发送消息来调用其他 verticle 公开的其他服务。
附:
1) 无需使用 vert.x 编写 main
方法(您可以在 fat jar 中使用 io.vertx.core.Launcher
或 vertx
可执行文件来运行你的主verticle)。
2) 您可以使用 fat jar 或 vertx
可执行文件中的 io.vertx.core.Launcher
类将所有 verticle 作为单独的 pid 启动,或者您也可以启动主 verticle 内有多个 verticle,因此默认情况下它们共享相同的事件循环(但您也可以声明一个工作池并根据: https://vertx.io/docs/vertx-core/java/#worker_verticles 使用“worker verticles”)。
关于java - Vert.x - Verticle 和 Services 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728483/