使用天蓝色服务总线中的python识别预定的消息计数

时间:2017-03-15 18:51:15

标签: python python-2.7 azure azureservicebus

我正在使用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用户,第一次海报。

1 个答案:

答案 0 :(得分:1)

根据您的描述,根据我的理解,我认为您希望得到messageCount& countDetails来自Service Bus的Queue REST API Get与资源管理的响应,如下所示。

enter image description here

对于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以解决此问题。