【问题标题】:How many Consumers on a VertX EventBus Channel?VertX EventBus 通道上有多少消费者?
【发布时间】:2021-10-16 22:53:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: java asynchronous vert.x vertx-eventbus


    【解决方案1】:

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

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

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

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

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

    1. 很多逻辑来实现这个
    2. 取消注册消费者很难(不能保证消费者能够自行取消注册)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多