5

着信メッセージを rabbitmq 交換に発行するマルチスレッド アプリケーションがあります。rabbitmq Java クライアントを使用して、アプリケーションの起動時に単一の rabbitmq 接続を作成し、それをすべてのスレッドで共有します。各スレッドは新しいチャネル (threadlocal) を作成するため、rabbitmq のドキュメントで推奨されているようにチャネルが複数のスレッド間で共有されることはありません。netty を使用していますが、netty チャネル パイプライン スレッドと同じ数の rabbitmq チャネルが作成されています。ここまでは順調ですね。

ただし、netty スレッドではキープアライブ時間が 2 分間あります (これが必要であり、変更できません)。したがって、スレッドが 2 分間アイドル状態になると、スレッドは終了します。ただし、スレッドに関連付けられているチャネルは強制終了されず、接続が閉じるまでアイドル状態のままになります。したがって、IDLE で閉じられないチャネルのリストが増えています。ぶら下がっているチャネルの問題に対処するrabbitmqのドキュメントには何も見当たりませんでした。一定期間アイドル状態だったチャンネルを閉じる方法はありますか? そうでない場合、これを解決するための最良の代替手段は何ですか?

4

3 に答える 3

6

実際には、チャネルが接続にバインドされているため、Web コンソールからチャネルを閉じる方法はありません。できることは、Connectionsタブに移動し、接続をクリックして (チャネルと同じ ID を持っているため、簡単に識別できます)、開いたページでクリックすることです。Force Close

于 2016-11-16T18:39:17.360 に答える
0

RabbitMQ Management HTTP API を使用して、チャネルを一覧表示し、チャネルがアイドル状態になってからの各チャネルの詳細を確認し、それに応じて対応して、たとえばチャネルを閉じることができます。

ここを参照してください: http://hg.rabbitmq.com/rabbitmq-management/raw-file/3646dee55e02/priv/www-api/help.html

于 2014-06-23T11:56:09.390 に答える
0

同様の要件がありました。ずいぶん前のことなので、どこでその情報を見つけたのか覚えていません。しかし、これが私が自分のチャンネルを閉じた方法です。

    if (cancellationToken.IsCancellationRequested)
    {
         logger.InfoFormat("Cancellation requested, stopping case processor.");

         // 320: connection-forced
         channel.Close(320, "Service stopped");
     }
于 2016-07-14T15:41:22.220 に答える