连接耐用消费者 - Qpid Proton Python

时间:2017-02-13 18:18:18

标签: python activemq amqp qpid

我试图让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 个答案:

答案 0 :(得分:0)

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