我想在几个线程中处理消息,但在执行此代码期间出现错误:
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, ticket, queue, 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() _handle_read 中的文件“C:\work\projects\mq\libs\pika\adapters\base_connection.py”,第 162 行 self._on_data_available(数据) _on_data_available 中的文件“C:\work\projects\mq\libs\pika\connection.py”,第 589 行 框架)#参数 文件“C:\work\projects\mq\libs\pika\callback.py”,第 124 行,正在进行中 回调(*参数,**关键字) _on_remote_close 中的文件“C:\work\projects\mq\libs\pika\adapters\blocking_connection.py”,第 269 行 frame.method.reply_text) AMQPChannelError: (406, 'PRECONDITION_FAILED - 未知的交付标签 204')
版本:鼠兔 0.9.5、rabbitMQ 2.6.1