質問
RabBitmqとEasynetqを使って複数のキュー(私の場合は4つ)を使って優先メッセージを実装しようとしています。
IBus
インスタンスは、アプリケーションライフサイクル全体のために生き続けるべきであることを理解しています。
また、RabBitmqが特定のキューでより多くのメッセージを送信するのを阻止する唯一の方法は、IBus
を使用してDispose
を廃棄することです。
これら2つの矛盾する要因を考えると、私はこれを建築するべきですか?
キューごとの1つのIBus
インスタンスと、より重要なキュー上のメッセージが、それほど重要でないものの配置(後に再作成)されている場合は?
解決
優先順位付けは、EasyNetq / Rabbitmqを使った箱外に利用可能なものではないので、この質問に対する簡単な答えはありません。消費者キャンセル機能を使用して、IBUSを廃棄することなく購読をキャンセルできます。
var consumer = bus.Subscribe<MyMessage>( ....
...
// stop consuming:
consumer.Dispose();
.
しかし、私はこれが優先順位付けシステムの設計への答えであるとは思わない。Raw Rabbitmq.Clientを使用して、4つのキューすべてから消費され、それにコードされている優先順位付けアルゴリズムを持つ独自のiBasicConsumer実装を設計してください。かなり高度なもの私は怖いです。
所属していません StackOverflow