我目前使用以下代码检查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是否可用? (在线,未禁用,并准备排队/出队)
答案 0 :(得分:0)
不应执行监控实体(队列)。如果一个实体被禁用,它必须有充分的理由。如果一个实体被禁用,那么就会故意这样做,知道后果。只有当 的情况下,我才会同意协议如何传达它,而不是ping一个实体。
服务可用性是另一回事。如果您想确保服务已启动,是一次性检查还是每次操作?如果对于每个操作,您最好依赖内置的重试策略,如果需要,可以添加自己的后退策略。如果您需要在服务停止时采取措施,您可能需要查看Azure Monitor service。
答案 1 :(得分:0)
到目前为止,我有以下解决方案来检测可用性:
虽然它有效但感觉像是一种可靠地检测AzureServiceBus可用性的hacky方式。期待您的更优雅的解决方案。
word = ""
for x in range(0,3):
word += "word "
print(word)