2

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

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

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

消息是否会在环形缓冲区中排队并最终在稍后处理(考虑到 Netty 的vert.x 中事件总线的大小SingleThreadEventLoop限制为 20 亿)?如果达到限制,它们会被丢弃吗?

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

4

1 回答 1

3

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

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

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

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

于 2019-12-10T19:56:21.137 回答