2

Event Bus / Hazelcast がどのように機能するかについての理解が 1 つ欠けています。

クラスター化された EB を介して通信するコンシューマーとプロデューサーのバーチクルのケースを想像してみてください。消費部分は、CPU / メモリ / IO 集中型の計算を行っています。

ある時点で、負荷が原因でコンシューマーがメッセージをすぐに処理できない場合、何が起こるでしょうか?

メッセージはリング バッファ内でキューに入れられ、最終的に後で処理されますか( vert.x のイベント バスのサイズによるSingleThreadEventLoopNetty の20 億の制限を考慮して)? 制限に達した場合、それらはドロップされますか?

一般に、クラスター内のコンポーネントがクラッシュしなくなるとすぐに、EB 内のメッセージは永続的で配信が保証されていると見なすことができますか?

4

1 に答える 1

3

コンシューマがメッセージを処理できない場合、Vert.x はメモリ内のキューにメッセージを蓄積します。

キューが制限に達すると、メッセージはドロップされます。キュー内の要素の数は、 で構成できますMessageConsumer.html#setMaxBufferedMessages。メッセージサイズには依存しません。

配信の保証が必要な場合は、EventBus を使用せず、ActiveMQ などのメッセージング システムを使用します (Vert.x には、このようなメッセージング システム用のクライアントがあります)。

一般に、Vert.xはメッセージを失わないように最善を尽くしますが、EventBus は完全な機能を備えたメッセージング システムではありません。

于 2019-12-10T19:56:21.137 に答える