2017-09-05 6 views
1

私はpika 0.10.0とpython 2.7バージョンのRabbitMQコンシューマーを開発しています。私のコンシューマークライアントでは、入力メッセージに応じて一定期間実行するプロセスがあります。 3〜40分の範囲で変更できます。 ハートビートを無効にしたくありません。代わりに、delivery_tagが返送されるまで接続を維持できるcollbackメカニズムを探しています。それは可能ですか?ハートビートを無効にせずにpika BlockingConnectionを維持します

いくつかのリンクがありますが、すべて回避策としてハートビートを無効にすることを推奨しています。しかし、私はそれを無効にしたくありません。

参考:

Socket Error: 104 consuming messages with task that take a long time #753

BlockingConnection gets closed unexpectedly #734

また、余分な情報が必要な場合は私に知らせてください。 ありがとうございます。

答えて

2

唯一の解決策は、定期的にハートビートフレームを送信することです。

BlockingConnectionを使用する場合は、process_data_events関数を頻繁に呼び出す必要があります(time_limitは正常です)。 SelectConnectionまたは他の非同期アダプタを使用する場合、フレームを送信できるように、プロセスがブロックされていないことを確認する必要があります。

あなたのタスクが長時間実行されていて、何らかの理由で簡単にプロセスを中断または分割できない場合は、別のスレッド/プロセスでタスクを実行しても、メインスレッドからフレームを送信します。スレッド間でpika接続を使用しないでください(pikaはスレッドセーフではありません)。

関連する問題