java - Vert.x - Verticle 和 Services 之间的差异

标签 java vert.x vertx-verticle

我们几天前开始使用 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.Launchervertx 可执行文件来运行你的主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/

相关文章:

java - 如何阻止线程等待 vert.x 中的响应?

java - java中接口(interface)和抽象接口(interface)的区别

Java:Java 中的 UDP 是否可能损坏数据

java - 什么是简单英语的 "transactional unit of work"?

java - 如何解决错误 : java. lang.BootstrapMethodError : java. lang.NoClassDefFoundError: io/vertx/core/Promise

redis - Vertx js 和 Redis Sentinel 连接

尽管已安装,JavaFX PieChart 工具提示仍不显示

http - vertx web中的header比较是否区分大小写

hazelcast - Vertx 集群事件总线不会删除 kubernetes 滚动部署上的旧节点

java - MDC 记录 Vertx