C# 检查Rabbit MQ是否已关闭

C# 检查Rabbit MQ是否已关闭,c#,rabbitmq,C#,Rabbitmq,我正在编写一个C#控制台应用程序(Windows计划任务)来监视Rabbit MQ的状态。因此,如果队列关闭(服务关闭、连接超时或任何其他原因),它将发送通知邮件。我使用了RabbitMQ.Net客户端(版本4.1.1)。基本上,我正在检查CreateConnection()是否成功 private static void CheckRabbitMQStatus() { ConnectionFactory factory = new ConnectionFactory(); fa

我正在编写一个C#控制台应用程序(Windows计划任务)来监视Rabbit MQ的状态。因此,如果队列关闭(服务关闭、连接超时或任何其他原因),它将发送通知邮件。我使用了RabbitMQ.Net客户端(版本4.1.1)。基本上,我正在检查CreateConnection()是否成功

private static void CheckRabbitMQStatus()
{
    ConnectionFactory factory = new ConnectionFactory();
    factory.Uri = "amqp://guest:guest@testserver:5672/";
    IConnection conn = null;
    try
    {
        conn = factory.CreateConnection();
        conn.Close();
        conn.Dispose();
    }
    catch (Exception ex)
    {
        if (ex.Message == "None of the specified endpoints were reachable")
        {
            //send mail MQ is down
        }
    }
}

这是实现这一目标的正确方法吗?Rabbit MQ有几种可用的工具和插件,但我想要一个简单的C#解决方案。

如果您有一个简单的消息队列设置(没有集群或多台机器的联合),它应该可以工作

RabbitMQ API有一个有效性检查,设计用于监视工具,如您的工具。它实际上发送和接收一条消息。这可能是一个比你更敏感的健康检查。请参阅此处的最后一项

RabbitMQ本身是健壮的。通常,它遇到的故障模式是由于其他原因重新启动主机


注意:在Windows Marketplace中有Rob Three的一个不错的模板。这使得您可以很容易地将健康检查作为一项服务,而不是一项计划任务。当我重构我的MQ组件,使其作为服务而不是计划任务运行时,我的生活变得更加轻松。

ex的具体类型是什么?比较消息可能会在以后的版本中中断…异常类型为
RabbitMQ.Client.Exceptions.brokerRunReachableException
——也就是说,该消息与2020年8月的消息相同\_(ツ)_/¯