I've solved this (with help from the Qpid users mailing list).

As suspected, I needed to name the client connection. This is done by adding the following line of code before calling the connect method.

event.container.container_id = __file__

(NB I simply gave the connection the same name as the script)

Another gotcha was that the event.receiver.close() method, called once my script had processed all messages, destroys the durable subscription. To leave it in place after the script has ended, use event.receiver.detach() instead.

Mailing list thread here -> http://qpid.2158936.n2.nabble.com/Connecting-to-durable-consumer-Qpid-Proton-Python-td7659185.html

Answer from Jeremy Gooch on Stack Overflow
🌐
GitHub
github.com › apache › qpid-proton › blob › main › c › docs › logging.md
qpid-proton/c/docs/logging.md at main · apache/qpid-proton
Proton has always supported some control over its internal logging using environment variables. The one that has seen the most use is PN_TRACE_FRM which when set to '1', 'on' or 'true' turns on logging of protocol frame traces.
Author: apache
🌐
Apache Qpid
qpid.apache.org › releases › qpid-cpp-1.39.0 › messaging-api › book › ch01s15.html
1.15. Logging - Apache Qpid™
Use QPID_LOG_ENABLE to set the level of logging you are interested in (trace, debug, info, notice, warning, error, or critical):
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.39.0 › proton › c › api › logging.html
Qpid Proton C API: Logging
The Logger API uses a single environment variable to control the default logging state - PN_LOG.
🌐
PyPI
pypi.org › project › python-qpid-proton
python-qpid-proton · PyPI
Download URL: python_qpid_proton-0.40.0-cp312-cp312-macosx_13_0_x86_64.whl ... See more details on using hashes here. ... AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.40.0 › proton › python › docs › overview.html
API Overview — Qpid Proton Python API 0.40.0 documentation
To use SSL/TLS for encryption (when an amqps URL scheme is used), the above configuration file must contain a tls submap containing the following configuration entries (See proton.SSLDomain for details):
🌐
Apache Qpid
qpid.apache.org › releases › qpid-python-1.37.0 › messaging-api › examples › server.html
server - Apache Qpid™
import optparse, sys, traceback from qpid.messaging import * from qpid.util import URL from subprocess import Popen, STDOUT, PIPE from qpid.log import enable, DEBUG, WARN parser = optparse.OptionParser(usage="usage: %prog [options] ADDRESS ...", description="handle requests from the supplied address.") parser.add_option("-b", "--broker", default="localhost", help="connect to specified BROKER (default �fault)") parser.add_option("-r", "--reconnect", action="store_true", help="enable auto reconnect") parser.add_option("-i", "--reconnect-interval", type="float", default=3, help="interval betwee
🌐
Red Hat
docs.redhat.com › en › documentation › red_hat_build_of_apache_qpid_jms › 2.4 › html › using_qpid_jms › logging
Chapter 9. Logging | Using Qpid JMS | Red Hat build of Apache Qpid JMS | 2.4 | Red Hat Documentation
Set the environment variable (not the Java system property) PN_TRACE_FRM to 1. When the variable is set to 1, Proton emits frame logging to the console. Add the option amqp.traceFrames=true to your connection URI and configure the org.apache.qpid.jms.provider.amqp.FRAMES logger to log level TRACE.
Find elsewhere
🌐
GitHub
github.com › nuagenetworks › AMQP-Client › blob › master › amqpClient.py
AMQP-Client/amqpClient.py at master · nuagenetworks/AMQP-Client
#Usage: python amqpClienty.py -c[for cluster mode] -d[for durable subscription] -v[verbose mode] -i <client Id> -p <property file to use>[properties file to use] -f <log file for output>[log file location]
Author: nuagenetworks
Author: apache
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.38.0 › proton › python › docs › overview.html
API Overview — Qpid Proton Python API 0.38.0 documentation
Qpid Proton Python API 0.38.0 documentation » · API Overview · Messages are transferred between connected peers over ‘links’. At the sending peer the link is called a sender. At the receiving peer it is called a receiver. Messages are sent by senders and received by receivers.
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.39.0 › proton › python › docs › overview.html
API Overview — Qpid Proton Python API 0.39.0 documentation
Qpid Proton Python API 0.39.0 documentation » · API Overview · Messages are transferred between connected peers over ‘links’. At the sending peer the link is called a sender. At the receiving peer it is called a receiver. Messages are sent by senders and received by receivers.
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.37.0 › proton › python › docs › tutorial.html
Tutorial — Qpid Proton Python API 0.37.0 documentation
Now that we have defined the logic for handling these events, we create an instance of a Container, pass it our handler and then enter the event loop by calling run(). At this point, control passes to the container instance, which will make the appropriate callbacks to any defined handlers. To run the example, you will need to have a broker (or similar) accepting connections on that url either with a queue (or topic) matching the given address or else configured ...
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-0.37.0 › proton › python › examples › index.html
Proton Python Examples - Apache Qpid™
Apache Qpid, Messaging built on AMQP; Copyright © 2015 The Apache Software Foundation; Licensed under the Apache License, Version 2.0; Apache Qpid, Qpid, Qpid Proton, Proton, Apache, the Apache feather logo, and the Apache Qpid project logo are trademarks of The Apache Software Foundation; ...
🌐
Red Hat
docs.redhat.com › en › documentation › red_hat_build_of_apache_qpid_proton_dotnet › 1.0.0 › html › using_qpid_proton_dotnet › logging
Chapter 9. Logging | Using Qpid Proton DotNet | Red Hat build of Apache Qpid Proton DotNet | 1.0.0 | Red Hat Documentation
Using Qpid Proton DotNet · Chapter 9. Logging · Logging is important in troubleshooting and debugging. By default logging is turned off. To enable logging, you must set a logging level and provide a delegate function to receive the log messages. The library emits log traces at different levels: ...
🌐
Apache Qpid
qpid.apache.org › proton › index.html
Qpid Proton - Apache Qpid™
Qpid Proton is a high-performance, lightweight messaging library. It can be used in the widest range of messaging applications, including brokers, client libraries, routers, bridges, proxies, and more. Proton makes it trivial to integrate with the AMQP 1.0 ecosystem from any platform, environment, or language.
🌐
Apache Qpid
qpid.apache.org › releases › qpid-python-1.37.0 › messaging-api › examples › drain.html
drain - Apache Qpid™
import optparse from qpid.messaging import * from qpid.util import URL from qpid.log import enable, DEBUG, WARN parser = optparse.OptionParser(usage="usage: %prog [options] ADDRESS ...", description="Drain messages from the supplied address.") parser.add_option("-b", "--broker", default="localhost", help="connect to specified BROKER (default �fault)") parser.add_option("-c", "--count", type="int", help="number of messages to drain") parser.add_option("-f", "--forever", action="store_true", help="ignore timeout and wait forever") parser.add_option("-r", "--reconnect", action="store_true", hel
🌐
Apache Qpid
qpid.apache.org › releases › qpid-proton-dotnet-1.0.0-M4 › api › namespaceApache_1_1Qpid_1_1Proton_1_1Logging.html
Proton DotNet: Apache.Qpid.Proton.Logging Namespace Reference
Qpid · Proton · Logging · Classes | Enumerations · Apache.Qpid.Proton.Logging Namespace Reference · Log levels used by the proton logging abstractions.