Служебная шина Azure - просмотр сообщений по подписке

У меня есть доступ для прослушивания в теме / подписке для служебной шины Azure. Есть ли способ проверить, есть ли в подписке сообщение и сколько там сообщений. У меня нет управляющей строки подключения, и я думаю, что не могу запустить Service Bus Explorer. Я не собираюсь читать сообщение вне подписки.


person Shiju Samuel    schedule 13.09.2018    source источник


Ответы (2)


Я не собираюсь читать сообщение вне подписки.

Короткий ответ - нет. Для получения информации о теме или сообщении подписки требуется доступ Управление.

Если вы хотите получить количество сообщений подписки, вы можете попробовать следующие два способа:

1. У вас есть доступ для управления, для этого вы можете использовать следующий демонстрационный код.

var topicName = "topic1";
var subscriptionName = "subscription";
var address = "sb://xxx.servicebus.windows.net/"; //base address of namespace you are connecting to.
MessagingFactorySettings MsgFactorySettings = new MessagingFactorySettings
 {
     TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("SharedAccessKeyName", "xxxxxx"),
 };
MessagingFactory msgFactory = MessagingFactory.Create(address, MsgFactorySettings);
NamespaceManager manager = new NamespaceManager(msgFactory.Address,msgFactory.GetSettings().TokenProvider);
var subscriptioncDescription = manager.GetSubscription(topicName, subscriptionName);
var count = subscriptioncDescription.MessageCountDetails.ActiveMessageCount;

2. Используйте пакет SDK для Azure Microsoft.Azure.Management.ServiceBus.Fluent. Вам необходимо зарегистрировать приложение Azure AD и назначить ему соответствующую роль. Для получения дополнительной информации обратитесь к другому SO потоку.

 var subscriptionId = "Azure subscriptionId";
 var resourceGroupName = "rgName";
 var nameSpace = "tomtestsb";
 var topicName = "topic1";
 var subscriptionName = "subscription";
 var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"D:\Tom\Documents\azureCred.txt");
 var client = new ServiceBusManagementClient(credentials);
 client.SubscriptionId = subscriptionId;
 var topic = client.Topics.GetAsync(resourceGroupName, nameSpace, topicName).Result;
 var topicMessagecount = topic.CountDetails.ActiveMessageCount;
 var subscription = client.Subscriptions.GetAsync(resourceGroupName, nameSpace, topicName, subscriptionName).Result;
 var subscriptionMessagecount = subscription.CountDetails.ActiveMessageCount;
person Tom Sun - MSFT    schedule 14.09.2018

Количество сообщений в тематической подписке можно получить только с помощью строки управления подключением. Со строкой Listen Connection вы не можете читать свойства или количество сообщений.

Но вы можете просматривать сообщения в подписке, используя строку Listen Connection. Просмотр сообщений не блокирует и не удаляет сообщения из Подписки. Вы можете просматривать сообщения столько раз, сколько вам нужно.

Таким образом, с помощью строки Listen Connection вы можете узнать количество сообщений в подписке, просматривая сообщения одно за другим внутри цикла while и добавляя counter внутри цикла. Значение счетчика - это количество сообщений внутри Подписки.

person Arunprabhu    schedule 14.09.2018