0

我想在 EventBus 频道上发布一条消息,并收到所有收听该频道的人的回复。问题是,如果我不知道预期有多少响应,我怎么知道每个人都已经响应了?

我假设我需要知道有多少消费者才能知道我是否已经收到所有回复。

有什么方法可以知道当前有多少消费者正在“收听”一个 Vert.x EventBus 地址?

4

1 回答 1

0

EventBus 在“尽力而为”的基础上工作,因此即使您可以跟踪订阅者的数量,他们中的一些人也有可能永远不会返回您的消息。

如果您仍然倾向于尝试它,我可以通过几种方法来减少它。没有一个是真正推荐的,但我会尽量强调优点和缺点。

一种是通过反射 获得对handlerMap内部的引用。https://github.com/eclipse-vertx/vert.x/blob/master/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java#L48EventBusImpl

如果你得到它一次,当你的应用程序启动时,那应该会对性能产生很大影响。当然,如果 Vert.x 团队决定尽可能多地更改字段名称,这将在运行时中断。

另一种选择是使用vertx.sharedData(),例如getLocalMap()。所有消费者都将自己添加到地图中,生产者将检查地图以确定有多少消费者正在收听。该实现的问题:

  1. 很多逻辑来实现这个
  2. 取消注册消费者很困难(不能保证消费者能够自行取消注册)
于 2021-08-14T16:35:54.507 回答