MassTransitを使用して、あるプロセスからそのイベントを処理する他のすべてのプロセスにイベントを発行することを考えています。私の環境では、そのイベントに登録されている複数のプロセスが同じボックスで実行されている可能性があります。
MassTransit のサンプル コードに基づいて、マルチキャストを処理しようとしない非常に単純な概念実証を次に示します (プロセスも多くのマシンに分散されます)。以下の「メッセージ」を「イベント」と見なし、このプロセスのすべてのインスタンスでそのメッセージを取得する必要があるとします。
using System;
using MassTransit;
namespace BasicPubSub
{
public class Message
{
public String Text { get; set; }
}
public class Program
{
static void Main(string[] args)
{
//initialize the bus
var bus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
//cause the DTC and MSMQ to get installed/fixed if needed.
sbc.VerifyMsDtcConfiguration();
sbc.VerifyMsmqConfiguration();
//sbc.UseMulticastSubscriptionClient();//Doesn't behave for a private queue.
sbc.ReceiveFrom("msmq://localhost/test_queue");
//Listen for interesting events.
sbc.Subscribe(subs =>
{
subs.Handler<Message>(msg => Console.WriteLine(msg.Text));
});
});
//stay open until the user types "exit"
var message = "";
do
{
message = Console.ReadLine();
//broadcast the message
bus.Publish(new Message { Text = message });
} while (message != "exit");
}
}
}
この C# アプリの複数のインスタンスを実行すると、メッセージを受信するインスタンスは 1 つだけですが、メッセージを受信するにはすべてのインスタンスが必要です。この動作は、キューの従来の概念と一致しているため、問題ありません。
私が知りたいのは、MSMQ/MassTransit を使用してすべてのサブスクライバーが受信するメッセージをパブリッシュできるかどうかです。これは、単一のサブスクライバーがデキューし、他のサブスクライバーが受信しないのとは対照的です。多分私はハンマーを使おうとしていて、絵筆が必要ですか?
ここで明確にするために、私はさまざまな種類のメッセージに対して 1 つのキューを共有することを考えているのではなく、MT と MSMQ を使用して、特定の種類のメッセージに対して「ピアツーピア」pub-sub をセットアップしようとしています。