Re: Python Proton Binding on Receiver for Broker
On Thu, Apr 28, 2022 at 9:58 PM ONeil, Jerome wrote: > So that's grand. I need to control the binding with more detail, though, and > for the life of me I can't figure out how to do it. I've tried controlling > on the URL. I've tried Filters and Selectors. I have tried a variety of > different link and receiver properties (x-bindings, etc..) and other methods > scrapped up from the internet, and all I ever get for that binding is '#'. > > Can someone provide a simple example? Lets say I wanted that binding to > actually be > > bind [jerome.#] => MyTopic > > What would that look like? I am all out of clues and hope someone has one to > spare. Attached is an example that sets the topic binding. #!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # from __future__ import print_function, unicode_literals from proton import Described, Message, symbol from proton.reactor import Container, Filter from proton.handlers import MessagingHandler class SubjectFilter(Filter): def __init__(self, value): super(SubjectFilter, self).__init__({symbol('subject-filter'): Described(symbol('apache.org:legacy-amqp-topic-binding:string'), value)}) class Recv(MessagingHandler): def __init__(self): super(Recv, self).__init__() def on_start(self, event): conn = event.container.connect("anonymous@localhost:5672") event.container.create_sender(conn, "amq.topic") event.container.create_receiver(conn, "amq.topic", options=SubjectFilter("red.#")) def on_sendable(self, event): for i in ['red.panda', 'blue.whale', 'green.hornet', 'yellow.submarine', 'red.squirrel']: event.link.send(Message(subject=i, body="this is a message with subject %s" % i)) event.link.close() def on_message(self, event): print(event.message.body) try: Container(Recv()).run() except KeyboardInterrupt: pass - To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org For additional commands, e-mail: users-h...@qpid.apache.org
RE: [EXTERNAL]: Re: Python Proton Binding on Receiver for Broker
Hey Steve, Thanks for the reply. I’m pretty sure I’ve extracted that code a few times, too. 😃 I’d really like to do this all in Proton, though, for a couple reasons. Using a single library is on the list somewhere, and it will run in a pretty restricted environment. And also right up until now I kind of like the Proton API. It is really concise, and who doesn’t love callbacks? Best regards, -J From: Steve Huston Sent: Thursday, April 28, 2022 2:19 PM To: users@qpid.apache.org Subject: [EXTERNAL]: Re: Python Proton Binding on Receiver for Broker Hi Jerome, You can do that with the Python QMF API. I extracted the below from another script so it may need some adjustments but should get you there. -Steve import os import sys from qpid import * import qpid.messaging host="localhost" port=5672 ZjQcmQRYFpfptBannerStart This Message Is From an External Sender This message came from outside your organization. Please use caution responding to this email or opening any attachments. ZjQcmQRYFpfptBannerEnd Hi Jerome, You can do that with the Python QMF API. I extracted the below from another script so it may need some adjustments but should get you there. -Steve import os import sys from qpid import * import qpid.messaging host="localhost" port=5672 sock = util.connect(host, port) qmf_con = connection.Connection(sock) qmf_con.start() session = qmf_con.session(str(qpid.messaging.uuid4()), timeout=30) session.queue_declare(queue="MyTopic") session.exchange_bind(queue="MyTopic", exchange="whatever", binding_key="jerome.#") session.sync session.close(timeout=10) On 4/28/22, 4:48 PM, "ONeil, Jerome" mailto:jerome.on...@wabtec.com>> wrote: Hello, I am trying to set up a receiver for a topic on a qpid C++ broker and need to control the binding between the Source exchange and the receiver queue. I can get a simple receiver set up just fine and pull messages from it. >>> event.container.create_receiver("amqp://localhost/MyTopic") [jerome@localhost ~]$ qpid-config -r queues Queue 'debug-MyTopic' bind [#] => MyTopic So that's grand. I need to control the binding with more detail, though, and for the life of me I can't figure out how to do it. I've tried controlling on the URL. I've tried Filters and Selectors. I have tried a variety of different link and receiver properties (x-bindings, etc..) and other methods scrapped up from the internet, and all I ever get for that binding is '#'. Can someone provide a simple example? Lets say I wanted that binding to actually be bind [jerome.#] => MyTopic What would that look like? I am all out of clues and hope someone has one to spare. Best regards, -Jerome This email and any attachments are only for use by the intended recipient(s) and may contain legally privileged, confidential, proprietary or otherwise private information. Any unauthorized use, reproduction, dissemination, distribution or other disclosure of the contents of this e-mail or its attachments is strictly prohibited. If you have received this email in error, please notify the sender immediately and delete the original. Neither this information block, the typed name of the sender, nor anything else in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message. This email and any attachments are only for use by the intended recipient(s) and may contain legally privileged, confidential, proprietary or otherwise private information. Any unauthorized use, reproduction, dissemination, distribution or other disclosure of the contents of this e-mail or its attachments is strictly prohibited. If you have received this email in error, please notify the sender immediately and delete the original. Neither this information block, the typed name of the sender, nor anything else in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message.
Re: Python Proton Binding on Receiver for Broker
Hi Jerome, You can do that with the Python QMF API. I extracted the below from another script so it may need some adjustments but should get you there. -Steve import os import sys from qpid import * import qpid.messaging host="localhost" port=5672 sock = util.connect(host, port) qmf_con = connection.Connection(sock) qmf_con.start() session = qmf_con.session(str(qpid.messaging.uuid4()), timeout=30) session.queue_declare(queue="MyTopic") session.exchange_bind(queue="MyTopic", exchange="whatever", binding_key="jerome.#") session.sync session.close(timeout=10) On 4/28/22, 4:48 PM, "ONeil, Jerome" wrote: Hello, I am trying to set up a receiver for a topic on a qpid C++ broker and need to control the binding between the Source exchange and the receiver queue. I can get a simple receiver set up just fine and pull messages from it. >>> event.container.create_receiver("amqp://localhost/MyTopic") [jerome@localhost ~]$ qpid-config -r queues Queue 'debug-MyTopic' bind [#] => MyTopic So that's grand. I need to control the binding with more detail, though, and for the life of me I can't figure out how to do it. I've tried controlling on the URL. I've tried Filters and Selectors. I have tried a variety of different link and receiver properties (x-bindings, etc..) and other methods scrapped up from the internet, and all I ever get for that binding is '#'. Can someone provide a simple example? Lets say I wanted that binding to actually be bind [jerome.#] => MyTopic What would that look like? I am all out of clues and hope someone has one to spare. Best regards, -Jerome This email and any attachments are only for use by the intended recipient(s) and may contain legally privileged, confidential, proprietary or otherwise private information. Any unauthorized use, reproduction, dissemination, distribution or other disclosure of the contents of this e-mail or its attachments is strictly prohibited. If you have received this email in error, please notify the sender immediately and delete the original. Neither this information block, the typed name of the sender, nor anything else in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message.
Python Proton Binding on Receiver for Broker
Hello, I am trying to set up a receiver for a topic on a qpid C++ broker and need to control the binding between the Source exchange and the receiver queue. I can get a simple receiver set up just fine and pull messages from it. >>> event.container.create_receiver("amqp://localhost/MyTopic") [jerome@localhost ~]$ qpid-config -r queues Queue 'debug-MyTopic' bind [#] => MyTopic So that's grand. I need to control the binding with more detail, though, and for the life of me I can't figure out how to do it. I've tried controlling on the URL. I've tried Filters and Selectors. I have tried a variety of different link and receiver properties (x-bindings, etc..) and other methods scrapped up from the internet, and all I ever get for that binding is '#'. Can someone provide a simple example? Lets say I wanted that binding to actually be bind [jerome.#] => MyTopic What would that look like? I am all out of clues and hope someone has one to spare. Best regards, -Jerome This email and any attachments are only for use by the intended recipient(s) and may contain legally privileged, confidential, proprietary or otherwise private information. Any unauthorized use, reproduction, dissemination, distribution or other disclosure of the contents of this e-mail or its attachments is strictly prohibited. If you have received this email in error, please notify the sender immediately and delete the original. Neither this information block, the typed name of the sender, nor anything else in this message is intended to constitute an electronic signature unless a specific statement to the contrary is included in this message.