У меня есть доступ для прослушивания в теме / подписке для служебной шины Azure. Есть ли способ проверить, есть ли в подписке сообщение и сколько там сообщений. У меня нет управляющей строки подключения, и я думаю, что не могу запустить Service Bus Explorer. Я не собираюсь читать сообщение вне подписки.
Служебная шина Azure - просмотр сообщений по подписке
Ответы (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;
Количество сообщений в тематической подписке можно получить только с помощью строки управления подключением. Со строкой Listen Connection вы не можете читать свойства или количество сообщений.
Но вы можете просматривать сообщения в подписке, используя строку Listen Connection. Просмотр сообщений не блокирует и не удаляет сообщения из Подписки. Вы можете просматривать сообщения столько раз, сколько вам нужно.
Таким образом, с помощью строки Listen Connection вы можете узнать количество сообщений в подписке, просматривая сообщения одно за другим внутри цикла while
и добавляя counter
внутри цикла. Значение счетчика - это количество сообщений внутри Подписки.