0

私は Azure Service Bus に基づいて、API を介したクイック ファイア アンド フォーゲットと、トピックを介したバックグラウンド サービスによる大量のメッセージの非同期処理のためのシステムを開発しています。この質問のコンテキストでは、トピックには単一のサブスクリプションがあり、なぜそれがキューである可能性があるのですか? 他の理由から、これをトピックとして保持したいと思います。

WindowsAzure.ServiceBus最近、パッケージを使用して .NET Framework アプリからパッケージを使用して .NET Core パッケージにコードを移行しましたMicrosoft.Azure.ServiceBus。大量のメッセージを処理するために、次のMessageReceiverようなクラスを使用しています。

var connString = "...";
var subscriptionPath = EntityNameHelper.FormatSubscriptionPath("topic", "subscription");
var messageReceiver = new MessageReceiver(connString, subscriptionPath);
while (...)
{
    var messages = await messageReceiver.ReceiveAsync(10, TimeSpan.FromSeconds(5));
    ...
}

簡単にするために、さまざまな詳細を非表示にしました。私のアプリが 5 つのスレッドを開始し、同じmessageReceiverインスタンスを使用して各スレッドでメッセージを処理するという事実のように。

私は通常、このアプリの複数のインスタンスを実行して、スレッドとプロセスの両方に分散させています。そして、ようやく私の質問のコードにたどり着いたと思います。.NET Core と新しい NuGet パッケージに移行した後、メッセージを同時に処理しているアプリは 1 つだけであることに気付きました。2 つのコンソール ウィンドウを開き、各ウィンドウでプロセスを起動すると、ウィンドウ 1 のアプリが処理を開始することがわかります。Windows 2 のアプリは何も処理しません。数秒後、ウィンドウ 1 のアプリは処理を停止し、ウィンドウ 2 のアプリは処理を開始します。しばらくすると元に戻ります。スイッチには実際のパターンはありませんが、すべてのメッセージが正常に処理されています。

MessageReceiver同じサブスクリプションなどからのメッセージを処理するスレッドの合計最大数を許可する何らかの制限はありますか?

4

1 に答える 1