Если я запускаю следующий код, обратный вызов (тест), переданный потребителю , никогда не запускается.
Однако, если я буду следить за графическим интерфейсом rabbitmq, я вижу, что сообщение получено (но не подтверждено). Таким образом, кажется, что потребитель получает сообщение, но не передает его моему обратному вызову. Если установить для no_ack значение true, сообщение просто исчезнет из очереди, опять же без обратного вызова.
hn = "..."
usr = "..."
pwd = "..."
vh = "/"
port = 5672
rkey = "some.routing.key"
qname = "some-queue-name"
exchangeName = "MyExchange"
connection = BrokerConnection(hostname=hn,
userid=usr,
password=pwd,
virtual_host=vh,
port=port)
connection.connect()
ch = connection.channel()
# Create & the exchange
exchange = Exchange(name=exchangeName,
type="topic",
channel=ch,
durable=True)
exchange.declare()
# Temporary channel
ch = connection.channel()
# Create the queue to feed from
balq = Queue(name=qname,
exchange=exchange,
durable=True,
auto_delete=False,
channel=ch,
routing_key=rkey)
# Declare it on the server
balq.declare();
def test(b,m):
print '** Message Arrived **'
# Create a consumer
consumer = Consumer(channel=connection.channel(),
queues=balq,
auto_declare=False,
callbacks = [test]
)
# register it on the server
consumer.consume(no_ack=False);
print 'Waiting for messages'
while(True):
pass
Однако следующий код работает правильно (я могу успешно получить и подтвердить сообщение):
m = balq.get(no_ack=False)
m.ack()
print m
Но все дело в том, чтобы оставаться асинхронным. Так что, должно быть, что-то не так с моим обратным вызовом ..