SelectConnection не подключается к rabbitmq - PullRequest
1 голос
/ 08 июля 2019

Я новичок в программировании на Python, поэтому я пытаюсь использовать две очереди rabbitmq, используя pika, но использование SelectConnection вызывает исключение IndexError: tuple index out of range An invalid channel number has been specified, но если я использую BlockingConnection, я могу успешно потреблять очередь. Некоторая информация: 1 - я использую пример асинхронного сайта Пика 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()

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

1 Ответ

1 голос
/ 08 июля 2019

Вы используете старую версию документа, перейдите на сайт 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)

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

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

https://github.com/pika/pika

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

...