0

MSMQ マルチキャスト機能を使用してパブリッシャーおよびサブスクライバー モデルを作成したいと考えています。リンクの回答をたどりましたが、成功し ませんでしたMSMQ - マルチキャスト キューから メッセージを受信できません ローカル マシンで送受信されるメッセージ。

送信者:

using (var helloQueue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001"))
{
    while (true)
    {
        var stopWatch = new Stopwatch();
        stopWatch.Start();

        for (var i = 0; i < 1000; i++)
        {
            SendMessage(helloQueue,
                string.Format("{0}: msg:{1} hello world ", DateTime.UtcNow.Ticks, i));
        }

        stopWatch.Stop();
        Console.ReadLine();

        Console.WriteLine("====================================================");
        Console.WriteLine("[MSMQ] done sending 1000 messages in " + stopWatch.ElapsedMilliseconds);
        Console.WriteLine("[MSMQ] Sending reset counter to consumers.");

        SendMessage(helloQueue, "reset");
        Console.ReadLine();
    }
}

レシーバー:

int messagesReceived = 0;
var messages = new Queue<string>(5000);
var filePath = typeof(Subscriber).FullName + ".txt";
var path = @".\private$\hello-queue";

using (var helloQueue = new MessageQueue(path))
{
    helloQueue.MulticastAddress = "234.1.1.1:8001";
    while (true)
    {
        var message = helloQueue.Receive();
        if (message == null)
            return;

        var reader = new StreamReader(message.BodyStream);
        var body = reader.ReadToEnd();

        messagesReceived += 1;

        messages.Enqueue(body);
        Console.WriteLine(" [MSMQ] {0} Received {1}", messagesReceived, body);

        if (string.CompareOrdinal("reset", body) == 0)
        {
            messagesReceived = 0;
            File.WriteAllText(filePath, body);
            messages.Clear();
        }
    }
}

イベント ログに IP が表示されているマルチキャスト バインドのレジストリにキーを追加しました (これについてはわかりません)。キューで指定する MulticastAddress は、特定のものですか、それとも指定された範囲内の任意のものを使用できますか?

4

1 に答える 1

0

これは、ポート番号を変更するだけで解決しました。休みは大丈夫でした。

于 2016-06-16T07:15:27.110 に答える