1

1 つのサブスクリプションで 1 つのトピックを持っています。

次のようなメッセージを作成しています。

BrokeredMessage messageTaskA = new BrokeredMessage("New Task");
messageTaskA.Properties["Type"] = "A";

BrokeredMessage messageTaskB = new BrokeredMessage("New Task");
messageTaskB.Properties["Type"] = "B";

合計メッセージ、タイプ A の合計メッセージ、タイプ B カウンターの合計メッセージが必要です。

1) サブスクリプション内のメッセージの合計: SubscriptionDescription desc = namespaceManager.GetSubscription("topicName", "subscriptionName"); totalTask​​ = desc.MessageCount;

2) タイプ A のサブスクリプション内のメッセージの合計: ????

3) タイプ B のサブスクリプション内のメッセージの合計: ????

Receive 関数と Abandon 関数を使用せずにこれを行うことは可能ですか? たぶんフィルターを使用していますか?

前もって感謝します ルイ

4

4 に答える 4

0

タイプ A のメッセージがサブスクリプション A に、タイプ B のメッセージがサブスクリプション B になるようにフィルターを追加できます。

何かのようなもの:

myNamespaceManager.CreateSubscription(subDescriptionTypeB, new SqlFilter("Type = 'B'"));

次に、各キューのメッセージを個別に表示できます。

問題は、メッセージの処理順序を確認する必要がある場合です。

peek メソッドを使用して、サブスクリプションをロックせずにメッセージを取得することもできます。ただし、すべてのメッセージを取得する必要があるため、あまり効率的ではありません。キューに多くのメッセージがある場合、これは悪い考えです。

于 2015-02-26T12:45:26.420 に答える
0

プロパティを含むメッセージがサービス バスのシリアル化モードにあるため、これは簡単ではありません。デキューしない限り、メッセージのプロパティを表示することはできません。

peeklock を使用してプロパティを確認し、カウントを実行して破棄する方法が 1 つあります。メッセージがロックされている間、他のクライアントはメッセージを見ることができないため、クライアントが 1 つしかない場合に適しています。

タイプをプロパティに入れる代わりに、別のサブスクリプションを作成することもできます。

于 2013-07-25T15:25:40.490 に答える
0

適切なサブスクリプションに適切なメッセージ タイプを入れて、2 つのサブスクリプションを使用しないのはなぜですか?

于 2014-12-16T19:42:45.843 に答える
0

これを試して

 var subscriptionDes = namespaceManager.GetSubscription("TestTopic", "SubscriptionName");
            long messageCount = subscriptionDesc.MessageCount;
于 2015-02-26T09:45:15.233 に答える