首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法运行RabbitMQ的Python教程代码

无法运行RabbitMQ的Python教程代码
EN

Stack Overflow用户
提问于 2018-05-18 05:23:06
回答 6查看 16.4K关注 0票数 16

编辑:,我在我的设备上安装了错误版本的皮卡软件包。在我从pip上更新后,它就可以正常工作了。

我刚开始学习RabbitMQ的用法(使用Python),方法是跟随他们的教程send.py代码工作正常,但当我试图运行receive.py时,我会看到以下错误:

代码语言:javascript
复制
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内部的代码:

代码语言:javascript
复制
#!/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()

知道我做错了什么吗?

EN

回答 6

Stack Overflow用户

发布于 2019-03-29 10:05:14

你可能不再需要它了,但我和你有同样的问题,这就是我想出来的。

对我来说,RabbitMQ文档一定是使用了不同版本的pika。我发现在Pika1.0.0中,basic_consume函数有不同的参数顺序。这是我的机器上的样子:

代码语言:javascript
复制
    def basic_consume(self,
                  queue,
                  on_message_callback,
                  auto_ack=False,
                  exclusive=False,
                  consumer_tag=None,
                  arguments=None):

一旦我更改了传递的参数顺序,或者添加了关键字'on_message_callback=callback‘,这一切都起作用了。希望能帮上忙!

票数 29
EN

Stack Overflow用户

发布于 2019-05-24 05:30:53

只要改变

代码语言:javascript
复制
channel.basic_consume(callback, queue='hello', no_ack=True)

代码语言:javascript
复制
channel.basic_consume('hello', callback, auto_ack=True)
票数 20
EN

Stack Overflow用户

发布于 2018-05-18 06:38:01

我不能重复你的错误,但我想尽量简明扼要。

一开始,我在我的计算机上设置了一个rabbitmq服务器作为码头集装箱,而不是为了污染我的系统:

代码语言:javascript
复制
$ docker run -d --hostname localhost --name some-rabbit rabbitmq:3

然后,我使用IPAddress来查找我的rabbitmq容器实际上正在运行的:

代码语言:javascript
复制
$ docker inspect some-rabbit --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
172.17.0.2

接下来,我使用琵琶在python3中创建一个虚拟环境,其中至少包含pika和依赖项,如下所示:

代码语言:javascript
复制
$ mkdir example && cd example && pipenv --three install pika
Creating a virtualenv for this project…
Using /usr/bin/python3 (3.6.5) to create virtualenv…

请注意,如果您在安装pika时使用pipenv --two,您也可以在这里使用python2.7。

然后使用pipenv跳入环境:

代码语言:javascript
复制
~/example$ pipenv shell
Spawning environment shell (/bin/bash). Use 'exit' to leave.

在这里,我按照send.pyreceive.py的建议创建了两个文件pika示例文档,但是我将用上面提到的码头容器IP替换localhost

代码语言:javascript
复制
$ cat send.py 
#!/usr/bin/env python 
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='172.17.0.2'))
channel = connection.channel()


channel.queue_declare(queue='hello')

channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

receive.py

代码语言:javascript
复制
$ cat receive.py
#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(host='172.17.0.2'))
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()

让receive.py在一个终端上运行,在另一个终端中运行send.py,就像预期的那样:

代码语言:javascript
复制
 $ python receive.py 
 [*] Waiting for messages. To exit press CTRL+C

 $ python send.py
 [x] Sent 'Hello World!'

 $ python receive.py 
 [*] Waiting for messages. To exit press CTRL+C
 [x] Received b'Hello World!

HTH,f3rdy

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50404273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档