如何检查AzureServiceBus可用性

时间:2018-02-15 21:49:50

标签: c# azureservicebus

我目前使用以下代码检查Azure ServiceBus的可用性:

using Microsoft.ServiceBus.Messaging;
public static bool IsOnline(string queueName = null)
{
    try
    {
        QueueClient queueClient = QueueClient.CreateFromConnectionString(ConnectionString);
        queueClient.Peek(); //works, but will explode on Receive()
        return true;
    }
    catch
    {
        return false;
    }
}

但是,当禁用ASB队列时,Peek()仍然有效,但Receive()将引发错误。

Microsoft.ServiceBus.Messaging.MessagingEntityDisabledException: Messaging entity 'servicebus01:Queue:myqueue' is currently disabled. fc088ddd-0592-460e-a8b1-9587f708a6a1_G30 ---> System.ServiceModel.FaultException1[System.ServiceModel.ExceptionDetail]:...

是否有可靠的方法来检查ServiceBus是否可用? (在线,未禁用,并准备排队/出队)

2 个答案:

答案 0 :(得分:0)

不应执行监控实体(队列)。如果一个实体被禁用,它必须有充分的理由。如果一个实体被禁用,那么就会故意这样做,知道后果。只有当 的情况下,我才会同意协议如何传达它,而不是ping一个实体。

服务可用性是另一回事。如果您想确保服务已启动,是一次性检查还是每次操作?如果对于每个操作,您最好依赖内置的重试策略,如果需要,可以添加自己的后退策略。如果您需要在服务停止时采取措施,您可能需要查看Azure Monitor service

答案 1 :(得分:0)

到目前为止,我有以下解决方案来检测可用性:

  1. 创建专用的测试队列
  2. 从该队列接收消息
  3. 虽然它有效但感觉像是一种可靠地检测AzureServiceBus可用性的hacky方式。期待您的更优雅的解决方案。

    word = ""
    for x in range(0,3):
        word += "word "
    print(word)