You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ Python教程receive.py运行报错及解决(pika版本问题)

解决RabbitMQ receive.py中basic_consume()的参数冲突问题

Hey there! Glad you got it sorted out by updating your pika package—let me explain exactly why that error happened, in case you run into similar version-related quirks later.

错误原因:pika版本之间的参数签名变化

The TypeError you saw is all about conflicting parameter orders between different pika versions:

  • 旧版pika(比如0.10.x及更早):basic_consume()的第一个参数是queue,回调函数是通过on_message_callback关键字参数传入的。
  • 新版pika(1.0+,也就是官方教程基于的版本):basic_consume()的第一个参数直接是回调函数,queue变成了后续的关键字参数。

你的代码是按照新版教程写的,把callback放在了第一个位置,同时又显式传了queue='hello'。但你之前装的旧版pika会把第一个位置参数当成queue,再加上你传的queue='hello'关键字参数,就导致同一个参数被传了两次,所以抛出got multiple values for keyword argument 'queue'的错误。

两种可行的解决办法

  1. 升级pika到最新版本(你已经成功这么做了)
    运行这条命令就能完成升级:

    pip install --upgrade pika
    

    升级后,你的原有代码就和新版本的参数签名匹配,自然能正常运行。

  2. 如果要保留旧版pika,调整参数写法
    把queue作为第一个位置参数,回调函数用on_message_callback指定,修改后的代码如下:

    #!/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)
    
    # 适配旧版pika的写法
    channel.basic_consume(queue='hello', on_message_callback=callback, no_ack=True)
    
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()
    

总结

这个问题完全是pika版本迭代带来的参数签名变化导致的,官方教程始终基于最新稳定版更新,所以更新pika包是最直接的解决方式,也能保证你后续跟着教程学习时不会再遇到类似版本不兼容的问题。

内容的提问来源于stack exchange,提问作者sudhanva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:33