いくつかのスレッドでメッセージを処理したいのですが、このコードの実行中にエラーが発生します:
from __future__ import with_statement
import pika
import sys
from pika.adapters.blocking_connection import BlockingConnection
from pika import connection, credentials
import time
import threading
import random
from pika.adapters.select_connection import SelectConnection
from pika.connection import Connection
import traceback
def doWork(body, args, channel):
r = random.random()
time.sleep(r * 10)
try:
channel.basic_ack(delivery_tag=args.delivery_tag)
except :
traceback.print_exc()
auth = credentials.PlainCredentials(username="guest", password="guest")
params = connection.ConnectionParameters(host="localhost", credentials=auth)
conn = BlockingConnection(params)
channel = conn.channel()
while True:
time.sleep(0.03)
try:
method_frame, header_frame, body = channel.basic_get(queue="test_queue")
if method_frame.NAME == 'Basic.GetEmpty':
continue
t = threading.Thread(target=doWork, args=[body, method_frame, channel])
t.setDaemon(True)
t.start()
except Exception, e:
traceback.print_exc()
continue
エラーの説明:
トレースバック (最新の呼び出しが最後): ファイル「C:\work\projects\mq\start.py」の 43 行目 method_frame、header_frame、body = channel.basic_get(queue="test_queue") ファイル「C:\work\projects\mq\libs\pika\adapters\blocking_connection.py」、318 行目、basic_get 内 self.basic_get_(self, self._on_basic_get, チケット, キュー, no_ack) ファイル「C:\work\projects\mq\libs\pika\channel.py」、469 行目、basic_get 内 no_ack=no_ack)) ファイル「C:\work\projects\mq\libs\pika\adapters\blocking_connection.py」、244 行目、send_method 内 self.connection.process_data_events() ファイル「C:\work\projects\mq\libs\pika\adapters\blocking_connection.py」、94 行目、process_data_events 内 self._handle_read() ファイル「C:\work\projects\mq\libs\pika\adapters\base_connection.py」、162 行目、_handle_read 内 self._on_data_available(データ) ファイル「C:\work\projects\mq\libs\pika\connection.py」、589 行目、_on_data_available 内 フレーム) # Args ファイル「C:\work\projects\mq\libs\pika\callback.py」、124 行目、処理中 callback(*引数、**キーワード) ファイル「C:\work\projects\mq\libs\pika\adapters\blocking_connection.py」、269 行目、_on_remote_close frame.method.reply_text) AMQPChannelError: (406、「PRECONDITION_FAILED - 不明な配信タグ 204」)
バージョン: pika 0.9.5、rabbitMQ 2.6.1