目前,我使用以下代码检查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是否可用?(联机,未禁用,并已准备好排队/排队)
发布于 2018-02-16 00:38:01
不应执行监视实体(队列)。如果一个实体被禁用,它必须有一个很好的理由。如果一个实体被禁用,就会故意这样做,因为它知道后果。只有在这种情况下,我才会同意一个协议,如何沟通它,而不是敲打一个女强人。
服务可用性是另一回事。如果您想确保服务已经启动,是一次检查还是每次操作?如果对每个操作,您最好依赖内置重试策略,如果需要,添加您自己的后退策略。如果需要在服务关闭时采取行动,则可能需要查看Azure监视器服务。
发布于 2018-02-16 01:09:56
到目前为止,我有以下解决方案来检测可用性:
尽管它可以工作,但它感觉像是可靠地检测AzureServiceBus可用性的一种困难的方法。期待着您给我一个更优雅的解决方案。
public static bool IsOnline(string queueName = null)
{
try
{
QueueClient queueClient = QueueClient.CreateFromConnectionString(ConnectionString, "testqueue", ReceiveMode.ReceiveAndDelete);
queueClient.Receive(TimeSpan.Zero);
queueClient.Close();
return true;
}
catch
{
return false;
}
}https://stackoverflow.com/questions/48816878
复制相似问题