2017-01-04 20 views
1

Rabbit MQのステータスを監視するためのC#コンソールアプリケーション(Windowsのスケジュールされたタスク)を作成しています。したがって、キューが停止している場合(サービス停止、接続タイムアウトなど)、通知メールを送信します。私はRabbitMQ .Netクライアント(バージョン4.1.1)を使用しました。基本的に私はCreateConnection()が成功しているかどうかをチェックしています。Rabbit MQがダウンしていないか確認してください。

private static void CheckRabbitMQStatus() 
{ 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.Uri = "amqp://guest:[email protected]: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#で簡単な解決策が必要です。

+0

「ex」の具体的なタイプは何ですか?メッセージを比較すると、後のリリースで破損する可能性があります... –

答えて

1

単純なメッセージキューの設定(複数のマシンのクラスタリングまたはフェデレーションなし)がある場合は、これはうまくいくはずです。

RabbitMQ APIには、あなたのような監視ツールで使用するように設計されたアライブチェックがあります。実際にメッセージを送受信します。これはあなたの健康チェックよりも敏感な可能性があります。ここの最後の項目を参照してください。

http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v2_2_0/priv/www-api/help.html

のRabbitMQ自体が堅牢です。通常、発生する障害モードは、ホストが他の理由で再起動されることです。

注:Windows MarketplaceにはRob ThreeのテンプレートDebuggableServiceがあります。これにより、スケジュールされたタスクではなく、サービスとしてのヘルスチェックを簡単に行うことができます。 MQタスクをリファクタリングしてスケジュールされたタスクではなくサービスとして実行すると、私の人生が楽になりました。

関連する問題