我正在使用Python来监控Azure Service Bus实现的状态,并且当前使用以下代码来识别消息计数。我使用此消息计数来确保队列没有建立,这可以帮助确定工作者角色(从队列中消耗)是否无法正常运行。
QueueList = bus_service.list_queues()
for queue in QueueList:
queueDetails = bus_service.get_queue(queue.name)
api.Metric.send(metric="ServiceBus.%s.MessageCount" % (bus_service.service_namespace), points=queueDetails.message_count, host=queue.name)
使用" queueDetails.message_count"这段代码效果很好,如果消息是活动消息并立即发出,我们会将结果提供给监控工具。当某些事情被安排在以后出去时,问题就出现了,并且设置为预定消息而不是活动消息。这会抛弃我们的监控,因为看起来有些消息没有发送,而实际上它们只是被延迟了。
我在powershell中玩过这个,看到powershell,使用Microsoft.ServiceBus.dll可以返回一个通用的"消息计数",但也有能力将其分解为活动状态,预定,死信等。
我知道python SDK只是API的一个包装器,但我想知道是否有人有任何想法,除了"使用powershell"。虽然我将powerhsell作为最后的手段,但我想尽可能继续使用python。
感谢大家的帮助。希望这篇文章有足够的细节。很长一段时间StackOverflow用户,第一次海报。
答案 0 :(得分:1)
根据您的描述,根据我的理解,我认为您希望得到messageCount
& countDetails
来自Service Bus的Queue
REST API Get
与资源管理的响应,如下所示。
对于Python编程,首先,您需要通过pip命令pip install azure==2.0.0rc msrest msrestazure azure-mgmt-servicebus
安装一些必需的包。
这是我的示例代码。
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.servicebus import ServiceBusManagementClient
subscription_id = '<your-subscription-id>'
credentials = ServicePrincipalCredentials(
client_id = '<your-client-id-registed-on-AzureAD>',
secret = '<your-client-secret>',
tenant = '<your-tenant-id>'
)
# Or using User/Password.
# For more details, see http://azure-sdk-for-python.readthedocs.io/en/latest/quickstart_authentication.html
# credentials = UserPassCredentials(
# 'user@domain.com', # Your user
# 'my_password', # Your password
# )
servicebus_client = ServiceBusManagementClient(credentials, subscription_id)
resource_group = '<your-servicebus-resource-group>'
namespace_name = '<your-servicebus-namespace-name>'
queue_name = '<your-queue-name>'
queue = servicebus_client.queues.get(resource_group, namespace_name, queue_name)
print queue.message_count, queue.count_details
同时,如果您收到有关执行上述操作的权限的错误信息,请参阅https://github.com/JamborYao/ArmManagement以解决此问题。