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

如何正确使用proton-python接收qpidd指定topic的消息

问题排查

你的代码存在两处核心错误:

  1. 错误使用dynamic=True参数:该参数用于让broker自动生成临时唯一队列,使用时不需要手动指定目标地址。你同时传入了自定义topic地址和dynamic=True,导致参数冲突,无法正确绑定到amq.topic交换器的指定路由键。
  2. 地址规则适配:如果需要接收com.product.sample1、com.product.sample2这类符合规则的消息,需要用topic通配符匹配,单级路径匹配用*,多级路径匹配用#。

修正后代码

from proton.handlers import MessagingHandler
from proton.reactor import Container

broker_url = "192.168.80.81:5672"
# 匹配所有com.product.sample开头的单级路由键,适配sample1、sample2的场景
topic = "amq.topic/com.product.sample*"
# 如果只需要接收sample1的消息,直接写 topic = "amq.topic/com.product.sample1" 即可


class Client(MessagingHandler):
    def __init__(self, broker_url, topic):
        super(Client, self).__init__()
        self.broker_url = broker_url
        self.topic = topic

    def on_start(self, event):
        conn = event.container.connect(self.broker_url)
        # 移除dynamic=True参数,直接指定接收地址
        self.receiver = event.container.create_receiver(conn, self.topic)

    def on_message(self, event):
        print(event.message.body)


Container(Client(broker_url, topic)).run()

补充说明

命令行的qpid-receive默认走AMQP 0-10协议,和python-qpid-proton默认使用的AMQP 1.0协议在qpidd上的地址规则基本兼容,你遇到的问题核心就是dynamic=True参数导致的绑定失败,移除后即可实现和命令行一致的接收效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:01