SelectConnection не подключается к rabbitmq

Я новичок в программировании на Python, поэтому я пытаюсь использовать две очереди rabbitmq с помощью pika, но использование SelectConnection вызывает исключение IndexError: tuple index out of range An invalid channel number has been specified, но если я использую BlockingConnection, я могу успешно использовать очередь. Некоторая информация: 1 — я использую асинхронный пример веб-сайта pika 2 — Мой RabbitMQ работает с докером из официального образа докер-хаба

Вот мой код:

import pika

if __name__ == '__main__':
    def callback(channel, method, properties, body):
        print(body)
        channel.basic_ack(delivery_tag=method.delivery_tag)

    def on_open(connection):
        channel = connection.channel(on_channel_open)


    def on_channel_open(channel):
        print("on channel open")
        channel.basic_consume(callback, queue='hello')
        channel.basic_consume(callback, queue='poc')


    parameters = pika.URLParameters('amqp://guest:guest@localhost:5672/%2F')
    connection = pika.SelectConnection(parameters=parameters,on_open_callback=on_open)

    try:
        connection.ioloop.start()
    except KeyboardInterrupt:
        connection.close()

Что я делаю не так?


person Vinicius    schedule 08.07.2019    source источник


Ответы (1)


Вы используете старую версию документа, обратитесь к latest сайту:

https://pika.readthedocs.io/en/latest/examples.html

Вам нужно добавить on_open_callback:

def on_open(connection):
    channel = connection.channel(on_open_callback=on_channel_open)

В противном случае первый параметр является номером канала.

Вы также можете найти правильное использование, просмотрев исходный код Pika:

https://github.com/pika/pika

Это будет решено в следующей версии Pika, 1.1.0

person Luke Bakken    schedule 08.07.2019
comment
Благодарю вас! отсутствовал только on_open_callback.Теперь работает как положено! - person Vinicius; 09.07.2019