2017-09-05 3 views
0

ロギング目的のために、サブスクリプションクライアントが与えられているAzure Service Busサブスクリプションのメッセージ数を取得したいとします。唯一のexamplesNamespaceManagerを使用していますが、私は既にSubscriptionClientを持っているので少し冗長です。クライアントからSubscriptionDescriptionに直接行く方法はありますか?SubscriptionClientからのメッセージ数を取得する

FWIW、私は名前空間マネージャ経由で迂回を使用してみましたが、私はそれが401権限エラーがスロー取得:

int GetMessageCount(SubscriptionClient client) { 
    NameSpaceManager nsm = new NamespaceManager(client.MessagingFactory.NamespaceEndpoints.First()); 
    SubscriptionDescription desc = nsm.GetSubscription(client.TopicPath, client.Name); // <-- throws error 
    long numMsg = desc.MessageCount; 
    return numMsg; 
} 

答えて

1

Is there a way to go directly from the client to the SubscriptionDescription?

SubscriptionClient Classによると、それはへの直接的な方法を提供していません。指定されたSubscriptionClientオブジェクトからメッセージ数を取得します。

it throws a 401 Unauthorized error

コードclient.MessagingFactory.NamespaceEndpoints.First()返す名前空間のエンドポイントは、そのサービスの名前空間URIのベースアドレスを持つMicrosoft.ServiceBus.NamespaceManagerクラスの新しいインスタンスを初期化していますが、アクションを実行する許可資格を指定しませんしたがって、実行すると401エラーが返されますGetSubscriptionアクション。次のコードは私の側でうまく動作します、あなたはそれを試すことができます。

NamespaceManager nsm = new NamespaceManager(client.MessagingFactory.NamespaceEndpoints.First(), TokenProvider.CreateSharedAccessSignatureTokenProvider("{keyName}", "{SharedAccessKey}")); 

var subscriptionDesc = nsm.GetSubscription(topicName, subscriptionName); 

long messageCount = subscriptionDesc.MessageCount; 
+0

私はこれと似たようなことをしています。他の答えで私のコメントを見てください。 – ThS

1

NamespaceManagerは間違ったデータで構成されています。

client.MessagingFactory.NamespaceEndpoints.First() 

は、Azureのサービスバスの名前空間URI 、必要とされていない接続文字列を返します。

Is there a way to go directly from the client to the SubscriptionDescription?

実際はありません。エンティティのメッセージ数を取得するには、NamespaceManagerを経由しなければならない管理操作があります。クライアントはエンティティの管理ではなく、メッセージの実行時操作です。また、毎回名前空間マネージャを作成するべきではありません。一度それを持って、それをキャッシュして再使用してください。

+0

あまりにも悪いです。私はNamespaceManagerを一度作成してから、メッセージの数を知りたいときはいつでも 'GetSubscription()'を呼び出すことになりました。私はNamespaceManagerを渡す必要があるので、コードはちょっと乱雑です。 – ThS

+1

ライブラリーの設計に応じて、管理操作とメッセージング操作を混在させることは想定されていません。これは、新しいmicrosoft.azure.servicebusクライアントでさらに強化されています。 –

+0

ええ、私は自分の実装に満足しているわけではありませんが、それは仕事を完了します。今私は物事が素早く複雑になることを理解しています。私がそのルートにもっと深く行くなら、私はそれをきれいにして二つの懸念を分けるでしょう。 – ThS

関連する問題