9

優先メッセージ(AMQPなど)を一貫してサポートしないメッセージ指向ミドルウェアの場合、キューにFIFOセマンティクスしかない場合に、優先消費を実装するための最良の方法は何ですか?一般的な使用例は、メッセージの大量のバックログがキューに存在する場合に、消費者が優先度の低いメッセージの前に優先度の高いメッセージを受信するシステムです。

4

1 に答える 1

10

特定の単一キューに対するFIFOサポートのみを考えると、もちろん、複数のキュー、中間、またはより複雑なコンシューマーを導入する必要があります。

複数のキューは、いくつかの方法で処理できます。プロデューサーとコンシューマーは、2つのキューを間に置くことに同意できます。1つは優先度の高いもので、もう1つはバックグラウンドタスク用です。

プロデューサーが単一のキューに制限されているが、コンシューマーを制御できる場合は、パスにファンアウトルーターを導入することを検討してください。したがって、プロデューサー->ルーターは単一のキューであり、ルーターにはコンシューマーへの2つのキューがあります。

これに取り組む別の方法は、理想的とは言えない可能性がありますが、コンシューマーにスレッドをスピンさせてキューの前に配置し、作業を内部にディスパッチすることです。上記のルーターバージョンに似ていますが、単一のアプリ内にあります。これには、アプリ内で複数のメッセージが送信されるという欠点があり、障害が発生した場合の回復が複雑になる可能性があります。

優先度の高いイベントがまだ残っている場合でも、それらの一部を処理する必要がある場合は、優先度の低いイベントの飢餓を考慮することを忘れないでください。

于 2009-12-24T02:13:11.490 に答える