一个VertX EventBus通道上有多少消费者?



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

我假设我需要知道有多少消费者,以便知道我是否已经得到了所有的响应。

有没有办法知道目前有多少消费者在"听"?到一个Vert。x EventBus地址?

EventBus works on a " best effort ";基础,所以即使你可以跟踪订阅者的数量,也有可能他们中的一些人永远不会回复你的消息。

如果你仍然倾向于尝试,我可以想到一些方法。没有一个是真正推荐的,但无论如何我都会尝试突出优点和缺点。

一种是通过反射在EventBusImpl中得到对handlerMap的引用。https://github.com/eclipse-vertx/vert.x/blob/master/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java L48

如果您在应用程序启动时获得一次,这应该会对性能产生很大影响。当然,在运行时它会中断,如果。X团队决定尽可能更改字段的名称。

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

  1. 大量的逻辑来实现这个
  2. 取消消费者注册是困难的(没有保证消费者将能够取消注册自己)

最新更新