0

キューに送信するメッセージはそれぞれ個人のスケジュールごとに異なる必要があります。だから私はメッセージリストとそれぞれを再送するための関連する間隔を持っています。私はrabbitMQ/pikaとapschedulerを使用しています。多くの例によると、私は最も単純なBlockingConnection / channel/queueを作成しました。その直後にメッセージをプッシュしようとすると、すべてが正常に機能します。rabbitmqWebインターフェイスで、すべてのメッセージがキューに入れられていることがわかります。動作するコードは次のとおりです。

    self.cr = Queue('DIRECT_C_QUEUE', True, ex_type='direct')
    for i in range(1,10000):
        self.cr.channel.basic_publish(exchange='', routing_key='DIRECT_C_QUEUE', body='hello_world')

しかし、apschedulerコールバック関数を介して(まったく同じ方法で)メッセージをプッシュしようとすると、キューに表示されるメッセージはごくわずか(約1〜10)です(ただし、コールバックは常に発生し、メッセージの公開時に例外はありません!) 。

最後に、私はそのような警告を受け取り始めます:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pika/connection.py:642:UserWarning:Pika:書き込みバッファーが1125バイトで警告しきい値を超え、推定43フレーム遅れて警告(メッセージ%(self.outbound_buffer.size、est_frames_behind))

まだキューに新しいメッセージはありません。

私はPythonを初めて使用しますが、どんな助けでも大歓迎です。

4

2 に答える 2

2

問題の原因を見つけました:apschedulerはbasic_publish呼び出しを別のスレッドで実行し、pikaはスレッド間の共有接続を推奨していません-http: //pika.github.com/faq.html

そのため、毎回新しい接続を作成するか、新しいメッセージをキューに入れてメインスレッド(接続が作成された場所)から公開するかを選択しました。

于 2012-08-08T07:50:04.773 に答える
-1

ulimitを増やすことでその問題を修正しました

/ etc / default/rabbitmq-serverを編集して設定します

ulimit -n 4096

次に、rabbitmqを再起動します

sudo/etc/init.d/rabbitmq-サーバーの再起動

于 2012-07-17T16:04:25.940 に答える