【问题标题】:Check if Rabbit MQ is down检查 Rabbitmq 是否已关闭
【发布时间】:2017-01-04 11:47:34
【问题描述】:

我正在编写一个 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# 解决方案。

【问题讨论】:

  • ex的具体类型是什么?比较消息可能会在以后的版本中中断...
  • 异常类型为RabbitMQ.Client.Exceptions.BrokerUnreachableException -- 话虽如此,消息与2020年8月相同¯\_(ツ)_/¯

标签: c# rabbitmq


【解决方案1】:

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

RabbitMQ API 有一个活动性检查,专为您的监控工具使用而设计。它实际上发送和接收消息。这可能是比您的更敏感的健康检查。请参阅此处的最后一项。

https://www.rabbitmq.com/monitoring.html#health-checks

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

注意:在 Windows Marketplace 中有一个很好的 DebuggableService 模板,作者是 Rob Three。这使得将您的健康检查作为一项服务而不是作为计划任务进行安装变得非常容易。当我重构我的 MQ 东西以作为服务而不是计划任务运行时,我的生活变得更轻松了。

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2012-01-29
    • 2010-12-22
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多