连接耐用消费者 - Qpid Proton Python

Posted

技术标签:

【中文标题】连接耐用消费者 - Qpid Proton Python【英文标题】:Connecting to durable consumer - Qpid Proton Python 【发布时间】:2017-07-01 20:05:34 【问题描述】:

我正在尝试让 Qpid Proton Python 客户端通过 AMQP v1.0 作为持久消费者订阅 ActiveMQ 代理。

我可以创建一个持久订阅,但不太明白如何在我的脚本下次运行时获取相同的订阅。

每次运行后,ActiveMQ 管理控制台显示已创建持久订阅,并根据我的脚本输入命名,但下一次运行只是创建另一个,而不是连接到之前创建的。

我想我可能错过了“ClientID”的创建(正如 ActiveMQ 所说的那样),但看不到(在 Qpid Proton 文档中)如何设置它。

这是我的代码:-

def on_start(self, event):
    if self.subscription_name:
        logging.debug("Naming durable subscription " + self.subscription_name)
        durable = DurableSubscription()
    else:
        logging.debug("Subscription will not be durable")
        durable = None

    messaging_connection = event.container.connect(self.url)
    logging.info(messaging_connection.clientID)
    event.container.create_receiver(
        messaging_connection,
        self.resource,
        name=self.subscription_name,
        options=durable
    )
    logging.debug("Connected to " + self.url + "/" + self.resource)

【问题讨论】:

【参考方案1】:

我已经解决了这个问题(在 Qpid 用户邮件列表的帮助下)。

正如怀疑的那样,我需要命名客户端连接。这是通过在调用connect 方法之前添加以下代码行来完成的。

event.container.container_id = __file__

(注意,我只是将连接命名为与脚本相同的名称)

另一个问题是 event.receiver.close() 方法在我的脚本处理完所有消息后调用,它会破坏持久订阅。要在脚本结束后保留​​它,请改用 event.receiver.detach()

这里的邮件列表线程-> http://qpid.2158936.n2.nabble.com/Connecting-to-durable-consumer-Qpid-Proton-Python-td7659185.html

【讨论】:

以上是关于连接耐用消费者 - Qpid Proton Python的主要内容,如果未能解决你的问题,请参考以下文章

qpid proton url,用于从给定订阅(主题)接收消息

使用 Python Qpid/Proton/Messenger(),如何过滤来自 Azure 事件中心的消息?

AMQP Qpid Proton - 无法将消息发送到超过 256 个队列

Qpid第五课 消息总线使用经验

使用 Spring、ActiveMQ 和 Qpid 进行集成测试

2019 年 macOS 上的 SASL 状态如何?