SelectConnection 没有连接到 rabbitmq
SelectConnection does not connect to rabbitmq
我是 Python 编程新手,所以我尝试使用 pika 使用两个 rabbitmq 队列,但是使用 SelectConnection
会引发异常 IndexError: tuple index out of range
An invalid channel number has been specified
,但是如果我使用 BlockingConnection
我能够成功使用队列。
一些信息:
1 - 我正在使用 pika 网站异步示例
2 - 我的 RabbitMQ 是 运行 docker 来自 docker hub oficial image
这是我的代码:
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()
我做错了什么?
您使用的是旧版文档,请参考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的源码找到正确的用法:
下个版本的Pika会解决这个问题,1.1.0
我是 Python 编程新手,所以我尝试使用 pika 使用两个 rabbitmq 队列,但是使用 SelectConnection
会引发异常 IndexError: tuple index out of range
An invalid channel number has been specified
,但是如果我使用 BlockingConnection
我能够成功使用队列。
一些信息:
1 - 我正在使用 pika 网站异步示例
2 - 我的 RabbitMQ 是 运行 docker 来自 docker hub oficial image
这是我的代码:
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()
我做错了什么?
您使用的是旧版文档,请参考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的源码找到正确的用法:
下个版本的Pika会解决这个问题,1.1.0