是否有任何选项可以使用新的 Azure.messaging.servicebus 包检索队列的活动消息计数?
使用旧的 Microsoft.azure.servicebus,您可以使用公开 GetQueueRuntimeInfoAsync(String, CancellationToken) 的 ManagementClient
var managementClient = new ManagementClient("queue connection string"));
var runtimeInfo = await managementClient.GetQueueRuntimeInfoAsync("queueName");
var messagesInQueueCount = runtimeInfo.MessageCountDetails.ActiveMessageCount;
有没有办法实现类似的目标? 谢谢你。
ServiceBusManagementClient
。它公开了访问实体运行时信息的方法,例如 GetQueueRuntimePropertiesAsync()
,它返回 QueueRuntimeProperties
。 QueueRuntimeProperties
对象拥有所有信息,包括 ActiveMessageCount
。
令人惊讶的是,找到我正在寻找的解决方案是多么困难,因为很多东西不断被弃用,并且是一个不断变化的目标。我最终通过逐步导入不同的库并在调试模式下逐步完成一些库偶然发现了这一点:
from azure.servicebus.management import ServiceBusAdministrationClient
CONNECTION_STR = 'Endpoint=sb://mygroupname.servicebus.windows.net/;SharedAccessKeyName=sbnamespacerule01;SharedAccessKey=bla bla bla Wm3+ASbGYYqQU='
QUEUE_NAME = 'my-queue'
management_client = ServiceBusAdministrationClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True)
queue_runtime_info = management_client.get_queue_runtime_properties(QUEUE_NAME)
queue_length = queue_runtime_info.total_message_count
print(f"Queue Length: {queue_length}")
# The following attributes are available for queue_runtime_info:
# dead_letter_message_count: 0
# name: 'classification-queue'
# scheduled_message_count: 0
# size_in_bytes: 0
# total_message_count: 0
# transfer_dead_letter_message_count: 0
# transfer_message_count: 0
我希望它对某人有帮助,我在这上面花了太多钱,甚至没有提及。