我想在 EventBus 频道上发布一条消息,并收到所有收听该频道的人的回复。问题是,如果我不知道预期有多少响应,我怎么知道每个人都已经响应了?
我假设我需要知道有多少消费者才能知道我是否已经收到所有回复。
有什么方法可以知道当前有多少消费者正在“收听”一个 Vert.x EventBus 地址?
我想在 EventBus 频道上发布一条消息,并收到所有收听该频道的人的回复。问题是,如果我不知道预期有多少响应,我怎么知道每个人都已经响应了?
我假设我需要知道有多少消费者才能知道我是否已经收到所有回复。
有什么方法可以知道当前有多少消费者正在“收听”一个 Vert.x EventBus 地址?
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()
。所有消费者都将自己添加到地图中,生产者将检查地图以确定有多少消费者正在收听。该实现的问题: