2017-02-13 10 views
0

耐久消費者としてAMQP v1.0よりもActiveMQブローカーを購読するQpid Proton Pythonクライアントを取得しようとしています。耐久消費者に接続する - Qpid Proton Python

私は耐久性のあるサブスクリプションを作成できますが、次回スクリプトを実行したときに同じサブスクリプションを選択する方法を理解していません。各実行後

、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) 

答えて

0

は私が(メーリングリストQpidユーザーからの助けを借りて)これを解決してきました。

疑いがあるように、クライアント接続に名前を付ける必要がありました。これは、connectメソッドを呼び出す前に、次のコード行を追加して行います。

event.container.container_id = __file__ 

(NBは私が単にスクリプトとして、接続に同じ名前を与えた)

もう一つの落とし穴は、私のスクリプトは、すべてのメッセージを処理した後に呼び出されevent.receiver.close()方法は、永続サブスクリプションを破壊するということでした。スクリプトが終了した後にその場所に置くには、代わりにevent.receiver.detach()を使用してください。

ここにメーリングリストのスレッド - >http://qpid.2158936.n2.nabble.com/Connecting-to-durable-consumer-Qpid-Proton-Python-td7659185.html

関連する問題