0

У меня есть очередь, на которой несколько потребителей работают в круговой форме.Rabbitmq Acking для нескольких потребителей

Delivery_tag используется для отправки сообщений после того, как потребитель выполнил обработку. Но несколько потребителей устанавливают одинаковые delivery_tag, хотя сообщение, на котором они работают, отличается.

В результате, когда acking сделан, я получаю precondition failed.

Может ли кто-нибудь советовать, что я делаю неправильно?

Это потребитель code.I получил его по этой ссылке:

http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/

from amqplib import client_0_8 as amqp 

conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/", insist=False) 
chan = conn.channel() 

chan.queue_declare(queue="po_box", durable=True, exclusive=False, auto_delete=False) 
chan.exchange_declare(exchange="sorting_room", type="direct", durable=True, auto_delete=False,) 

chan.queue_bind(queue="po_box", exchange="sorting_room", routing_key="jason") 

def recv_callback(msg): 
    print 'Received: ' + msg.body + ' from channel #' + str(msg.channel.channel_id) 

chan.basic_consume(queue='po_box', no_ack=True, callback=recv_callback, consumer_tag="testtag") 
while True: 
    chan.wait() 
chan.basic_cancel("testtag") 


chan.close() 
conn.close() 
+0

Вы можете разместить свой код для потребителя? –

+0

FYI потребительский код, который вы получили, это Python not Groovy. –

+0

в данном потребительском коде не указан. –

ответ

0

Это потребитель code.I получил его по этой ссылке.

http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/

from amqplib import client_0_8 as amqp 

conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/", insist=False) 
chan = conn.channel() 

chan.queue_declare(queue="po_box", durable=True, exclusive=False, auto_delete=False) 
chan.exchange_declare(exchange="sorting_room", type="direct", durable=True, auto_delete=False,) 

chan.queue_bind(queue="po_box", exchange="sorting_room", routing_key="jason") 

def recv_callback(msg): 
    print 'Received: ' + msg.body + ' from channel #' + str(msg.channel.channel_id) 

chan.basic_consume(queue='po_box', no_ack=True, callback=recv_callback, consumer_tag="testtag") 
while True: 
    chan.wait() 
chan.basic_cancel("testtag") 


chan.close() 
conn.close()