连接到耐用消费品 - Qpid Proton Python

Connecting to durable consumer - Qpid Proton Python

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

我可以创建持久订阅,但不太了解下次我的脚本 运行s 时如何选择相同的订阅。

在每个 运行 之后,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)

我已经解决了这个问题(在 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