I doubt that I can give any sort of definitive answers here as my experience of AMQP 1.0 is barely off the n00b level yet, but RE: "

What I need to do is create a reply queue.  The AMQP 1.0
spec covers creating Dynamic Reply-To.  The problem I'm having is in
garbage collection of the abandoned queues as these queues have a permanent
lifetime policy.  If I were using qpid (rather than proton) I could simply
have the client create the queue using a name of its choice with the
DeleteOnClose lifetime policy and I also set exclusive to true and I get
exactly what I need

"there
This sounds like what you are actually looking for is to be able to set your queue to be exclusive and auto-delete, which is certainly something that you can do with qpid::messaging and JMS (at least for AMQP 0.10).

I'd be surprised if you couldn't do this for AMQP 1.0, but there seems to be rather a lot of differences between the two and I'm still waiting for a set of "AMQP 1.0 for AMQP 0.10 users" documents to be written by someone who knows (hint hint :-))


My guess is that Gordon Sim might be able to help you out if he's reading this, it is Gordon who has written the AMQP 1.0 support for qpid::messaging and I believe that this is based on the Proton engine API so it's pretty likely that if setting the policies you require is possible then Gordon will know how to do it - though that said there's no guarantee that if it's possible to do with Proton engine that it'll be also supported on the Proton messenger API, but I'd be surprised if not (though messenger abstracts connection/session concepts so there are definitely conceptual differences).

I'm much more familiar with qpid::messaging/JMS myself and I'd be quite keen for some guidance on AMQP 1.0 Addressing and examples of say how to write something in messenger that could publish or subscribe to things that I'm familiar with - most of my current use cases publish to amq.match - the default headers exchange and subscribe by using x-bindings. Over time I'll migrate to message selectors, but in the short term I'd love to know how to go about getting this stuff interoperable.

As Robbie mentioned I've done a fair bit of work on QMF, though it's worth pointing out that the underlying implementation is built on JMS and currently uses the AMQP 0.10 client, I'll need to give things a bit of a shake through when I get more familiar with AMQP 1.0, but it's worth mentioning that the longer term journey should really be to enable AMQP 1.0 Management support - again something that I need to do when I'm a bit more familiar and have a bit of time.

The Java Broker QMF plugin that I put together (take a look in qpid/tools/src/java) is pretty decent, though one of the quirks is that there are a number of differences in the underlying management models between the C++ and Java brokers. I've mapped a fair amount to cover off the most common use cases but for Java Broker specific things there are likely to be gaps.

If you are using Java there are examples in qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/tools the QpidConfig example shows how to add and remove queues. The QMF stuff responds to the QMF map message protocol, so you can also use the Python qpid-config to add/delete queues (and you could lift code from that if you're programming in Python) for C++ you'd have to resort to writing map messages directly. I'm a bit rusty on that as I've tended to use the API but I could probably dig out some examples that Gordon put together if you are interested.


That said in your mail you say "It seems that I can create queues with the DeleteOn* lifetime policies using REST, but then the queues are immediately deleted. " I guess it doesn't seem to make sense to me to try and create a queue with an auto delete policy with either QMF or the Java Broker REST API because auto delete means that the queue gets deleted after the last connection to it goes away, so "but then the queues are immediately deleted " would be what I'd expect.

Given my last paragraph I still reckon your best bet is to hope Gordon (or Rafael Schloming) can suggest how to establish auto delete/exclusive behaviour in Proton - given my comments about such things getting zapped after the last connection goes I'd be surprised if it's not something that can be applied as part of the queue Node creation.

Regards,
Frase


On 09/01/14 19:46, Shearer, Davin wrote:
Hello,

Is there a way, using proton and QMF to create a queue that has a lifetime
policy other than permanent?  If so, how?

I am trying to build a transport library in C using proton with support for
a qpid broker.  What I need to do is create a reply queue.  The AMQP 1.0
spec covers creating Dynamic Reply-To.  The problem I'm having is in
garbage collection of the abandoned queues as these queues have a permanent
lifetime policy.  If I were using qpid (rather than proton) I could simply
have the client create the queue using a name of its choice with the
DeleteOnClose lifetime policy and I also set exclusive to true and I get
exactly what I need, but it this ties me to qpid.

Instead, what I want to do is use proton for the AMQP 1.0 messaging and for
queue management use the vendor-specific management framework (so for qpid,
it is QMF).  This means that if I need to support other vendor's broker, I
extend the queue management functions with support for that vendor's
specific management framework and the actual messaging (since its AMQP 1.0)
just uses proton.

My thought is to use the qpid java broker's REST interface for queue
creation.  It seems that I can create queues with the DeleteOn* lifetime
policies using REST, but then the queues are immediately deleted.

bash$ for policy in DeleteOnClose DeleteOnNoLinks DeleteOnNoLinksOfMessages
DeleteOMessages; do echo "Policy: $policy"; curl -X PUT -u
webadmin:webadmin -d "{\"durable\":true,\"lifetimePolicy\":\"${policy}\"}"
http://localhost:8080/rest/queue/default/test_queue; curl -X GET -u
webadmin:webadmin http://localhost:8080/rest/queue/default/test_queue;
echo; done
Policy: DeleteOnClose
[ ]
Policy: DeleteOnNoLinks
[ ]
Policy: DeleteOnNoLinksOfMessages
[ ]
Policy: DeleteOMessages
[ ]

Also if I just create the queue, then try to change attributes later, the
changes are ignored:

curl PUT -u webadmin:webadmin -d '{}'
http://localhost:8080/rest/queue/default/test_queue
curl -X GET -u webadmin:webadmin
http://localhost:8080/rest/queue/default/test_queue
[ {
   "id" : "f280eb22-8110-3d2b-91d3-f68192c8d1b7",
   "name" : "test_queue",
   "state" : "ACTIVE",
   "durable" : false,
   "lifetimePolicy" : "PERMANENT",
   "type" : "standard",
   "exclusive" : false,
   "maximumDeliveryAttempts" : 0,
   "queueFlowControlSizeBytes" : 0,
   "queueFlowResumeSizeBytes" : 0,
   "queueFlowStopped" : false,
   "alertThresholdMessageAge" : 0,
   "alertThresholdMessageSize" : 0,
   "alertThresholdQueueDepthBytes" : 0,
   "alertThresholdQueueDepthMessages" : 0,
   "alertRepeatGap" : 30000,
   "statistics" : {
     "unacknowledgedBytes" : 0,
     "bindingCount" : 0,
     "queueDepthBytes" : 0,
     "queueDepthMessages" : 0,
     "totalEnqueuedBytes" : 0,
     "persistentDequeuedBytes" : 0,
     "consumerCount" : 0,
     "unacknowledgedMessages" : 0,
     "consumerCountWithCredit" : 0,
     "totalDequeuedBytes" : 0,
     "totalDequeuedMessages" : 0,
     "totalEnqueuedMessages" : 0,
     "persistentEnqueuedMessages" : 0,
     "persistentEnqueuedBytes" : 0,
     "persistentDequeuedMessages" : 0
   }
} ]
curl -X PUT -u webadmin:webadmin -d '{"durable":true}'
http://localhost:8080/t/queue/default/test_queue
curl -X GET -u webadmin:webadmin
http://localhost:8080/rest/queue/default/test_queue

shows no change in the durable attribute.

I am using qpid-broker-0.24 and proton 0.5.

Thanks.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to