私は出版社を持っており、rabbitmq:// localhost/test123キューにメッセージを発行しています。 1つのメッセージはTestMessageタイプで、もう1つはTestMessage2タイプです。Masstransit + RabbitMQ。 2つの異なるメッセージタイプの間で1つのキューを共有する
出版社の設定:
sbc.UseRabbitMq(r => r.ConfigureHost(new MessageUrn("rabbitmq://localhost/test123"), c => { }));
sbc.UseLog4Net();
sbc.UseJsonSerializer();
sbc.EnableMessageTracing();
sbc.ReceiveFrom(new MessageUrn("rabbitmq://localhost/test123"));
私は、メッセージの種類ごとに2人のseprate消費者(2つの消費者)、消費者1があります。
//config stuff
sbc.ReceiveFrom("rabbitmq://localhost/test678?prefetch=20");
sbc.Subscribe(subs => { subs.Handler<TestMessage>(msg => { Logger.Info(msg.Text); }); });
消費者2:
//config stuff
sbc.ReceiveFrom("rabbitmq://localhost/test678");
sbc.Subscribe(
subs =>
{
subs.Handler<TestMessage2>(
msg => { Logger.Info(String.Format("rcv:txt= {0}, number= {1}", msg.Text, msg.Number)); });
});
だから私をパブリッシャーを停止してコンシューマーの1つを実行すると、彼は自分のタイプのすべてのメッセージを消費し、他をエラーキューに移動します。 test678のExchangeには両方のタイプのバインディングがあります。
2人のコンシューマが他のメッセージをエラーキューに移動している間にメッセージを読み取ろうとするのは正常な動作ですか?興味のあるタイプの異なる消費者の間で1つのキューを共有できないのはなぜですか?
は、事前におかげで(私はそれがRabbitMQの設計上の考慮事項や制限はなくmasstransit問題ではないと考えています)。
非常にありがとう、クリス。もう1つ質問:キュー(この場合はrabbitmq)が消費者にメッセージを送信するためですか?したがって、消費者がこのメッセージタイプを処理する方法を知らない場合、消費者はそれをエラーキューに移動します。私は、消費者側からのポーリングがあれば、そのような状況は避けることができると信じています... – Sharov
RMQはメッセージタイプを区別しないので、ポーリングなどの問題はありません。 –