Vert.x 事件总线达到限制时的行为

inj*_*eer 4 hazelcast vert.x vertx-eventbus

我对事件总线/ Hazelcast 的工作原理缺乏一点了解。

想象一下消费者和生产者 Verticle 通过集群 EB 进行通信的情况。消耗部分是进行CPU/内存/IO密集型计算。

当在某个时刻由于负载而消费者无法立即处理消息时,会发生什么?

消息是否会在环形缓冲区内排队并最终在稍后处理(考虑到 NettySingleThreadEventLoop根据vert.x 中事件总线的大小限制为 20 亿条)?达到上限后会被丢弃吗?

一般来说,只要集群中没有组件崩溃, EB 中的消息是否可以被认为是持久的并且具有传递保证?

tse*_*ont 5

如果消费者无法处理消息,Vert.x 会将消息累积在内存中的队列中。

当队列达到其限制时,消息将被丢弃。队列中的元素数量可以通过 进行配置MessageConsumer.html#setMaxBufferedMessages。它不依赖于消息大小。

如果您需要交付保证,请不要使用 EventBus,而使用 ActiveMQ 等消息传递系统(Vert.x 有此类消息传递系统的客户端)。

一般来说,Vert.x会尽力不丢失消息,但 EventBus 根本不是一个功能齐全的消息系统。

  • 您可以在消息使用者上设置“discardHandler”,以便在消息被丢弃时收到通知 (2认同)