**编辑:**我在设备上安装了错误版本的pika软件包。从pip更新后,它工作正常。
我刚刚开始学习RabbitMQ的用法(使用Python),通过遵循他们的tutorial。send.py
代码工作正常,但当我尝试运行receive.py
时,我看到这个错误:
Traceback (most recent call last):
File "receive.py", line 15, in <module>
no_ack=True)
TypeError: basic_consume() got multiple values for keyword argument 'queue'
字符串
下面是receive.py
中的代码:
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(callback,
queue='hello',
no_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
型
知道我哪里做错了吗
6条答案
按热度按时间vhmi4jdf1#
你可能不再需要它了,但我和你有同样的问题,这是我发现的。
对我来说,原来RabbitMQ文档一定是使用了不同版本的pika。我发现在pika 1.0.0中,basic_consume函数有不同的参数顺序。这是它在我的机器上的样子:
字符串
一旦我改变了参数传递的顺序,或者添加了关键字'on_message_callback=callback',一切都正常了。我希望这对你有帮助!
n1bvdmb62#
只是改变
字符串
到
型
rseugnpd3#
我不能重现你的错误,但我想尽可能简洁,当试图。
首先,我在我的电脑上设置了一个rabbitmq服务器as docker container,不污染我的系统:
字符串
然后我使用inspect来查找我的rabbitmq容器实际运行的IPAddress:
型
接下来,我使用pipenv在python3中创建一个虚拟环境,其中至少包含pika和依赖项,以遵循示例:
型
注意,如果你在安装pika时说
pipenv --two
,你也可以在这里使用python 2.7。然后使用pipenv shell跳转到环境中:
型
在那里,我创建了两个文件
send.py
和receive.py
,正如example documentation of pika所建议的那样,但我将用上面的docker容器IP替换localhost
:型
receive.py
:型
在一个终端上运行receive.py,在另一个终端上运行send.py,就像预期的那样工作:
型
HTH,f3rdy
bvk5enib4#
我在Ubuntu 18.04上使用库存python-pika包版本0.11.0-1遇到了同样的问题,在我删除库存版本并通过pip安装了更新版本的pika(1.0.1)后,这个问题消失了。
4szc88ey5#
只是改变
字符串
到
型
因为我在lib中找到了代码。
aurhwmvo6#
这段代码可能会有帮助:
字符串
或
型