Azureキュー(ストアアカウント)のメッセージ数(またはおおよその数)を確認する方法があることは知っています。ただし、Azure Service Busキューで保留中のメッセージの数を照会する方法はありますか?
var nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
long count = nsmgr.GetQueue(queueName).MessageCount;
これは、MessagesCountDetails.ActiveMessageCountと呼ばれます。キュー内のアクティブメッセージの数を返します。あなたはおそらくいくつかのデッドレターメッセージを持っています:
var msg = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(Settings.Default.ConnectionString);
numofmessages.Text = msg.GetQueue(QueueName).MessageCountDetails.ActiveMessageCount.ToString();
Queue Description APIを見ましたか? MessageCount
というプロパティがあります。
こちらも 。NET SDKリファレンスドキュメントページ です。
デッドレターキューからカウントを取得しようとして、同じ問題に遭遇しました。 deadletterqueueでは直接カウントを取得できないようです。通常のキューのMessageCountDetailsから取得します。
string connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.Connstr"].ToString();
NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(connectionString);
return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;
私はそれを取得するためにドキュメントを掘り下げるのに2時間を費やしてきました。netコアとMicrosoft.Azure.ServiceBus nugetパッケージを使用している人々の場合、コードは次のようになります。
var managementClient = new ManagementClient("queue connection string"));
var runtimeInfo = await managementClient.GetQueueRuntimeInfoAsync("queueName");
var messagesInQueueCount = runtimeInfo.MessageCountDetails.ActiveMessageCount;
どうやら、古いQueueDescriptionオブジェクトではなく、QueueRuntimeInfoオブジェクトからすべてのカウント(デッドレター、アクティブなどを含む)に関する情報を取得します。
Azure Portal Cloud Shellで使用されるキューの長さを継続的に監視するPowerShellの例を次に示します
cd "Azure:\<MySubscription>\"
while (1) {(Get-AzureRmServiceBusQueue -ResourceGroup <myRG> -NamespaceName <myNS> -QueueName <myQueueName>).CountDetails | Select -expand ActiveMessageCount}
ジョセフの答えに基づいて、私は思いつきましたが、トピックとサブスクリプションについてです。
public async Task<long> GetCounterMessages()
{
var client = new ManagementClient(ServiceBusConnectionString);
var subs = await client.GetSubscriptionRuntimeInfoAsync(TopicName, SubscriptionName);
var countForThisSubscription = subs.MessageCount; //// (Comes back as a Long.)
return countForThisSubscription;
}