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

如何从Pika回调函数中提取routing_key及获取回调内数据

从Pika回调函数中提取routing_key的正确方法

你这里犯了个小误区——混淆了method和properties两个参数的作用啦!

看你打印的输出,method是pika.spec.Basic.Deliver类型的对象,它本身就包含了routing_key、delivery_tag这些和消息投递相关的元数据,根本不需要调用get_properties()方法。这个方法其实是属于properties参数(也就是pika.spec.BasicProperties对象)的,用来获取消息本身的属性(比如headers、content_type这类)。

正确的提取方式

直接访问method.routing_key就能拿到你要的路由键了,修改你的回调函数试试:

def callback(channel, method, properties, body):
    # 直接获取routing_key
    print(f"提取到的routing_key: {method.routing_key}")
    
    # 顺带提一下,Basic.Deliver的其他属性也可以直接访问
    print(f"消息的delivery_tag: {method.delivery_tag}")
    print(f"消息来自的exchange: {method.exchange}")
    
    # 如果需要获取消息自身的属性(比如headers),才用properties
    # 比如获取消息的headers:
    # print(f"消息headers: {properties.headers}")
    
    channel.basic_ack(delivery_tag=method.delivery_tag)

再帮你理清楚几个参数的区别:

  • method: 对应pika.spec.Basic.Deliver,存储的是消息投递过程中的元数据(路由键、投递标签、来源交换机等)
  • properties: 对应pika.spec.BasicProperties,存储的是消息本身的属性(比如消息优先级、过期时间、自定义headers等)
  • body: 消息的实际内容,是字节类型,需要的话可以用body.decode('utf-8')转换成字符串

你之前打印的Basic.Deliver(...)里已经明确显示了routing_key=laa,这就说明这个属性是直接挂在method对象上的,直接访问就完事啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:29