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

Behaviour of Vert.x Event-bus when reaching the limit

我缺少对事件总线/Hazelcast 工作原理的理解。

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

当某个时刻由于负载的原因,消费者无法立即处理消息时,会发生什么情况?

消息是否会在环形缓冲区内排队并最终在稍后处理(考虑到 Netty SingleThreadEventLoop 根据 的 20 亿条限制)?达到上限会掉线吗?

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

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

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

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

总的来说,Vert.x does its best不会丢失消息,但EventBus根本不是一个功能齐全的消息系统。