2

ローカルマシンにインストールしたWindowsServiceBus(Azureではない)で遊んでいます。ここの例に従いましたが、ローカルインスタンスに交換しました:http ://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-queues/

現在、2つのコンソールアプリをセットアップしています。1つは受信者で、もう1つは送信者です。受信者は新しいメッセージをリッスンし、出力のconsole.writelineを実行します。

// Continuously process messages sent to the "TestQueue" 
            while (true)
            {
                BrokeredMessage message = Client.Receive();

                if (message != null)
                {
                    try
                    {
                        Console.WriteLine("Body: " + message.GetBody<string>());
                        Console.WriteLine("MessageID: " + message.MessageId);
                        Console.WriteLine("Test Property: " +
                           message.Properties["TestProperty"]);
                        Console.WriteLine("----------------------");

                        // Remove message from queue
                        message.Complete();
                    }
                    catch (Exception)
                    {
                        // Indicate a problem, unlock message in queue
                        message.Abandon();
                    }
                }
            } 

次に、送信者がいます。

 while (true)
            {

                // Create message, passing a string message for the body
                BrokeredMessage message = new BrokeredMessage("Test message " + i);

                // Set some addtional custom app-specific properties
                message.Properties["TestProperty"] = "TestValue";
                message.Properties["Message number"] = i;

                // Send message to the queue
                Client.Send(message);

                i++;

                System.Threading.Thread.Sleep(50);
            }

これは実際にはすべてうまく機能します。1つの受信者を起動でき、送信者とメッセージを表示できます。次に、2番目の受信機を起動すると、メッセージは2つの受信機の間を自動的に行き来します。

ただし、3番目の受信者を起動すると、最初の受信者はメッセージの取得を終了します(別の受信者が終了するまで)。

3つすべて(または「n」)の受信者にキューからのメッセージを処理させる方法はありますか?キューの設定に設定があるのではないかと思いましたが、見つからないようです。

4

1 に答える 1

1

送信者のスリープを減らすと、最初の受信者はメッセージの取得を開始しますか?2番目と3番目の受信者がたまたまメッセージを取得しているが、キューが空であるために最初の受信者がメッセージを取得できないように、キューがオーバーリードされている可能性があります。

独立したリーダーにキューを処理させることを目標としていますか、それともすべての受信者がメッセージを処理する機会がある1対多の通信の後でしょうか。その場合は、トピックとサブスクリプションの使用を検討する必要があります。

于 2013-03-06T04:38:37.060 に答える