You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Gaston Quezada <qu...@gmail.com> on 2011/12/05 21:14:10 UTC

how to delete queue from jms client

Hi,

Im using qpid-client 0.12, and need delete queue from JMS client.
the queue is not auto delete

regards

-- 
Gastón Quezada

Re: how to delete queue from jms client

Posted by Fraser Adams <fr...@blueyonder.co.uk>.
Gaston,
I forgot to ask, but you are using the C++ broker aren't you?

I'm pretty sure that the Java broker doesn't support timed auto delete, 
and as I mentioned before the C++ broker supports this from version 0.10
Frase

Fraser Adams wrote:
> Hi Gaston,
> Try the following syntax (BTW IIRC you need at least Qpid 0.10 for 
> timed auto deletes to work):
> Also I can't claim credit for the following, this was a response from 
> uber-guru Gordon Sim when I asked a similar question back in July
>
>
> To create a 'shared' queue on-demand:
>
> my-queue; {create: always, node:{x-declare:{auto-delete:True, 
> arguments:{'qpid.auto_delete_timeout':120}}}}
>
> To create a subscription queue with the same properties:
>
> my-exchange; {link:{name:my-subscription, x-declare:{auto-delete:True, 
> arguments:{'qpid.auto_delete_timeout':120}}}}
>
>
> Unfortunately the x-declare stuff isn't well documented. I'm not aware 
> of the above being documented anywhere, perhaps Gordon knows of a 
> location?
>
> There's some useful docs for x-declare here 
> https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP 
> but it's quite hard to find and doesn't really illustrate that you 
> still need the "auto-delete:True" bit, which is possibly something 
> you've missed?
>
> That's about the limit of my knowledge..
>
> HTH,
> Frase
>
>
>
> Gaston Quezada wrote:
>> Dear Fraser,
>>
>> I need to configure the auto-delete arguments, with this parameter:
>> arguments:{'qpid.auto_delete_timeout':120}
>> When I create the queue, the logs show a empty field argument.
>>
>> Log:
>> main 2011-12-06 <tel:2011-12-06> 15:45:54,562 DEBUG 
>> [apache.qpid.transport.Connection] SEND: [conn:db23f1] ch=0 id=2 
>> QueueDeclare(queue=10.2.60.69-1671711, alternateExchange=, 
>> autoDelete=true, arguments={})
>>
>>
>> Thanks you for your help,
>>
>>
>>
>> 2011/12/6 Fraser Adams <fraser.adams@blueyonder.co.uk 
>> <ma...@blueyonder.co.uk>>
>>
>>     Here's some Java code for method invocation. This largely follows
>>     a similar pattern to Pavel's C++ example. Note that this method is
>>     taken from a much larger QMF2 API that I've written ,so there's
>>     some dependencies on other classes (you won't be able to use it
>>     directly, but hopefully you'll get the idea especially with
>>     Pavel's code - you shouldn't need to tweak much MethodResult
>>     really just wraps a Map - see the QMF2 API specification). My QMF2
>>     API stuff is actually finished, I've been promising to release it
>>     for weeks, but I've been writing a number of tools and utilities
>>     to demo it so I thought it'd be best to hold off until those are 
>> done.
>>
>>       /**
>>        * Invoke the named method on the named Agent.
>>        *
>>        * @param agent the Agent to invoke the method on.
>>        * @param content an unordered set of key/value pairs comprising
>>     the method arguments.
>>        * @param replyHandle the correlation handle used to tie
>>     asynchronous method requests with responses
>>        * @param timeout the time to wait for a reply from the Agent, a
>>     value of -1 means use the default timeout
>>        * @return the method response Arguments in Map form
>>        */
>>       public MethodResult invokeMethod(final Agent agent, final
>>     Map<String, Object> content,
>>                                        final String replyHandle, int
>>     timeout) throws QmfException
>>       {
>>           if (!agent.isActive())
>>           {
>>               throw new QmfException("Called invokeMethod() with
>>     inactive agent");
>>           }
>>           String agentName = agent.getName();
>>           timeout = (timeout < 1) ? _replyTimeout : timeout;
>>           try
>>           {
>>               Destination destination = (replyHandle == null) ?
>>     _replyAddress : _asyncReplyAddress;
>>               MapMessage request = _syncSession.createMapMessage();
>>               request.setJMSReplyTo(destination);
>>               request.setJMSCorrelationID(replyHandle);
>>               request.setStringProperty("x-amqp-0-10.app-id", "qmf2");
>>               request.setStringProperty("method", "request");
>>               request.setStringProperty("qmf.opcode", 
>> "_method_request");
>>               request.setStringProperty("qpid.subject", agentName);
>>
>>               for (Map.Entry<String, Object> entry : content.entrySet())
>>               {
>>                   request.setObject(entry.getKey(), entry.getValue());
>>               }
>>
>>               // Wrap request & response in synchronized block in case
>>     any other threads invoke a request
>>               // it would be somewhat unfortunate if their response
>>     got interleaved with ours!!
>>               synchronized(this)
>>               {
>>                   _requester.send(request);
>>                   if (replyHandle == null)
>>                   { // If this is a synchronous request get the response
>>                       Message response = 
>> _responder.receive(timeout*1000);
>>                       if (response == null)
>>                       {
>>                           log.info <http://log.info>("No response
>>     received in invokeMethod()");
>>                           throw new QmfException("No response received
>>     for Console.invokeMethod()");
>>                       }
>>                       MethodResult result = new
>>     MethodResult(AMQPMessage.getMap(response));
>>                       QmfException exception = result.getQmfException();
>>                       if (exception != null)
>>                       {
>>                           throw exception;
>>                       }
>>                       return result;
>>                   }
>>               }
>>               // If this is an asynchronous request return without
>>     waiting for a response
>>               return null;
>>           }
>>           catch (JMSException jmse)
>>           {
>>               log.info <http://log.info>("JMSException {} caught in
>>     invokeMethod()", jmse.getMessage());
>>               throw new QmfException(jmse.getMessage());
>>
>>           }
>>       }
>>
>>
>>
>>     Pavel Moravec wrote:
>>
>>         Hi Gastón,
>>         you can use QMF method "delete" with parameters "type"
>>         ("queue" in our case) and "name" (name of the queue).
>>
>>         Here is the code snippet from C++ program I use:
>>
>>            Connection connection(url/*, connectionOptions*/);
>>            try {
>>                connection.open();
>>                Session session = connection.createSession();
>>                Sender sender =
>>         session.createSender("qmf.default.direct/broker");
>>                Address responseQueue("#reply-queue; {create:always,
>>         node:{x-declare:{auto-delete:true}}}");
>>                Receiver receiver = 
>> session.createReceiver(responseQueue);
>>
>>                Message message;
>>                Variant::Map content;
>>                Variant::Map OID;
>>                Variant::Map arguments;
>>                OID["_object_name"] =
>>         "org.apache.qpid.broker:broker:amqp-broker";
>>                arguments["type"] = "queue";
>>                arguments["name"] = queue_name; // a string of the
>>         queue name
>>                               content["_object_id"] = OID;
>>                content["_method_name"] = "delete";
>>                content["_arguments"] = arguments;
>>                               encode(content, message);
>>                message.setReplyTo(responseQueue);
>>                message.setProperty("x-amqp-0-10.app-id", "qmf2");
>>                message.setProperty("qmf.opcode", "_method_request");
>>
>>                sender.send(message, true);
>>                               /* check response if the queue was 
>> properly deleted */
>>                Message response;
>>                if
>>         (receiver.fetch(response,qpid::messaging::Duration(30000)) ==
>>         true)
>>                {
>>                        qpid::types::Variant::Map recv_props =
>>         response.getProperties();
>>                        if (recv_props["x-amqp-0-10.app-id"] == "qmf2")
>>                                if (recv_props["qmf.opcode"] ==
>>         "_method_response")
>>                                        std::cout << "Response: OK" <<
>>         std::endl;
>>                                else if (recv_props["qmf.opcode"] ==
>>         "_exception")
>>                                        std::cerr << "Error: " <<
>>         response.getContent() << std::endl;
>>                                else
>>                                        std::cerr << "Invalid response
>>         received!" << std::endl;
>>                        else
>>                                std::cerr << "Invalid response not of
>>         qmf2 type received!" << std::endl;
>>                }
>>                else
>>                        std::cout << "Timeout: No response received
>>         within 30 seconds!" << std::endl;
>>
>>                connection.close();
>>                return 0;
>>            } catch(const std::exception& error) {
>>                std::cout << error.what() << std::endl;
>>                connection.close();
>>            }
>>
>>
>>
>>         Kind regards,
>>         Pavel
>>
>>         ----- Original Message -----
>>         
>>             From: "Gaston Quezada" <quezada.gaston@gmail.com
>>             <ma...@gmail.com>>
>>             To: users@qpid.apache.org <ma...@qpid.apache.org>
>>             Sent: Monday, December 5, 2011 9:14:10 PM
>>             Subject: how to delete queue from jms client
>>
>>             Hi,
>>
>>             Im using qpid-client 0.12, and need delete queue from JMS
>>             client.
>>             the queue is not auto delete
>>
>>             regards
>>
>>             --
>>             Gastón Quezada
>>
>>               
>>
>>         
>> ---------------------------------------------------------------------
>>         Apache Qpid - AMQP Messaging Implementation
>>         Project:      http://qpid.apache.org
>>         Use/Interact: mailto:users-subscribe@qpid.apache.org
>>         <ma...@qpid.apache.org>
>>
>>
>>         
>>
>>
>>     
>> ---------------------------------------------------------------------
>>     Apache Qpid - AMQP Messaging Implementation
>>     Project:      http://qpid.apache.org
>>     Use/Interact: mailto:users-subscribe@qpid.apache.org
>>     <ma...@qpid.apache.org>
>>
>>
>>
>>
>> -- 
>> Gastón Quezada
>>
>
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.apache.org
>
>


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Gordon Sim <gs...@redhat.com>.
On 12/09/2011 07:58 PM, Fraser Adams wrote:
> Gordon Sim wrote:
>>
>> I wouldn't consider these addressing examples as canonical reference
>> material! The Programming in Apache Qpid book is a bit of a mixture of
>> things. I'm not yet sure if or how these would fit in with that. In
>> the meantime I wanted to at least have somewhere where we could start
>> collecting 'recipes'.
> I guess, though that book does contain a few address examples, but
> they're a bit basic compared to your ones.
>
> What's your thinking on how easy (or otherwise) the confluence wiki
> stuff is to find from the main web site? As I said earlier I only found
> these pages after you posted the link, it's not easy to find from the
> main site.

I would agree that it is not well enough organised or easy to find 
things if you don't know they are there already.

>> I distinguish between on-demand creation of *shared* queues and/or
>> exchanges as addressable entities in their own right and the very
>> necessary on-demand (and hopefully increasingly transparent) creation
>> of 'subscription' queues as required by the AMQP 0-10 model.
> I think I see what you're getting at here. I think that there are
> subtleties though. In my case I have subscribers that may be considered
> single "logical" entities, however in practice they may comprise several
> physical instances each consuming messages from a given queue - in
> effect the shared queue enables a fairly simple approach to scaling out
> across multiple servers.
>>
>> With regard to the former, my opinion is simply that it is worth
>> considering carefully whether it is required. If it is not, keeping
>> the configuration entirely separate from the clients has advantages
>> and static creation avoids any race conditions.
> What sort of race conditions would you expect to crop up? I'm not aware
> of seeing any issues with out

If you have multiple clients using the node, then the first to try and 
use it will create it. If there are any differences in node properties 
between these clients, then the properties used depend on who tries to 
use it first.

>> I certainly accept that having no durable record of queue
>> configuration (as distinct from having the messages on them persisted)
>> is an unfortunate limitation.
> Are there any plans to introduce such a feature?

I don't know of anyone actively pursuing that as a priority at this point.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Fraser Adams <fr...@blueyonder.co.uk>.
Gordon Sim wrote:
>
> I wouldn't consider these addressing examples as canonical reference 
> material! The Programming in Apache Qpid book is a bit of a mixture of 
> things. I'm not yet sure if or how these would fit in with that. In 
> the meantime I wanted to at least have somewhere where we could start 
> collecting 'recipes'.
I guess, though that book does contain a few address examples, but 
they're a bit basic compared to your ones.

What's your thinking on how easy (or otherwise) the confluence wiki 
stuff is to find from the main web site? As I said earlier I only found 
these pages after you posted the link, it's not easy to find from the 
main site.
>
> I distinguish between on-demand creation of *shared* queues and/or 
> exchanges as addressable entities in their own right and the very 
> necessary on-demand (and hopefully increasingly transparent) creation 
> of 'subscription' queues as required by the AMQP 0-10 model.
I think I see what you're getting at here. I think that there are 
subtleties though. In my case I have subscribers that may be considered 
single "logical" entities, however in practice they may comprise several 
physical instances each consuming messages from a given queue - in 
effect the shared queue enables a fairly simple approach to scaling out 
across multiple servers.
>
> With regard to the former, my opinion is simply that it is worth 
> considering carefully whether it is required. If it is not, keeping 
> the configuration entirely separate from the clients has advantages 
> and static creation avoids any race conditions.
What sort of race conditions would you expect to crop up? I'm not aware 
of seeing any issues with out

>
> I certainly accept that having no durable record of queue 
> configuration (as distinct from having the messages on them persisted) 
> is an unfortunate limitation.
Are there any plans to introduce such a feature? From what I've gathered 
the Java broker has something like this, though I'm not familiar with 
that and it may just be hearsay.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Gordon Sim <gs...@redhat.com>.
On 12/09/2011 05:15 PM, Fraser Adams wrote:
> These examples are great, however I have to admit that I find the
> "cwiki.apache.org/confluence/" hard to find. It's only because I
> bookmarked a link you previously sent on
> https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP
> that I ever made it there at all.
>
> I think that my preference would be for these examples and the info on
> the x-declare to be included in the Programming in Apache Qpid book,
> which seems to be becoming somewhat of the canonical reference book.
> What do you think?

I wouldn't consider these addressing examples as canonical reference 
material! The Programming in Apache Qpid book is a bit of a mixture of 
things. I'm not yet sure if or how these would fit in with that. In the 
meantime I wanted to at least have somewhere where we could start 
collecting 'recipes'.

[...]
> Finally Re (from the addressing examples page) "Another use case for
> more complex addresses is where shared queues are to be created on
> demand, conforming to a specific configuration. My own advice is to
> think carefully about whether this is needed in any given situation or
> whether a static configuration might be more appropriate. However for
> those who feel they require it,"
>
> I've noticed you're views on this in some of your other posts on the
> mailing list and I'm really curious as to your reasoning behind it.

I distinguish between on-demand creation of *shared* queues and/or 
exchanges as addressable entities in their own right and the very 
necessary on-demand (and hopefully increasingly transparent) creation of 
'subscription' queues as required by the AMQP 0-10 model.

With regard to the former, my opinion is simply that it is worth 
considering carefully whether it is required. If it is not, keeping the 
configuration entirely separate from the clients has advantages and 
static creation avoids any race conditions.

I certainly accept that having no durable record of queue configuration 
(as distinct from having the messages on them persisted) is an 
unfortunate limitation.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Fraser Adams <fr...@blueyonder.co.uk>.
Hi Gordon,
These examples are great, however I have to admit that I find the 
"cwiki.apache.org/confluence/" hard to find. It's only because I 
bookmarked a link you previously sent on 
https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP 
that I ever made it there at all.

I think that my preference would be for these examples and the info on 
the x-declare to be included in the Programming in Apache Qpid book, 
which seems to be becoming somewhat of the canonical reference book. 
What do you think?

If you're not keen on that then perhaps hyperlinks to the wiki pages?

if https://cwiki.apache.org/confluence/display/qpid/Index represents the 
"real" Wiki "root" it might be better if that was what was linked off 
the Qpid home page Wiki link rather than https://cwiki.apache.org/qpid/ 
if I'm honest I find it a bit confusing and it's not obvious which is 
canonical.



Finally Re (from the addressing examples page) "Another use case for 
more complex addresses is where shared queues are to be created on 
demand, conforming to a specific configuration. My own advice is to 
think carefully about whether this is needed in any given situation or 
whether a static configuration might be more appropriate. However for 
those who feel they require it,"

I've noticed you're views on this in some of your other posts on the 
mailing list and I'm really curious as to your reasoning behind it.

My personal view is that I really like the idea of "self service" 
subscription. In my particular scenario I've got producers delivering to 
a headers exchange and acting kind of like a "data mart", where 
consumers can come along and pick up subsets of data that they want.

I'm personally not especially "anti" administratively created queues 
either (indeed I do this for setting up queue routes) however I think 
it's a bit inconvenient for general subscribers. Also there are 
currently general inconveniences with administratively created 
queues/etc. (which would be nice to get sorted IMHO) in particular the 
configuration doesn't persist broker restart. In other words if one 
actually wants a non-durable queue (as in the messages aren't persisted) 
you have to put up with it getting blatted when the broker restarts. 
This is pretty annoying - especially for queue routes!!! you'll recall 
some conversations we've had with respect to that.

Adding bindings administratively for lots of clients is fiddly too, 
especially headers clients. In my scenario I've got dozens of consumers 
with quite sophisticated headers bindings and when I need to restart the 
broker the clients automatically reconnect and the queues & bindings get 
recreated and the data just starts flowing. If I had to use 
administratively created stuff yeah I could script it, but why is that 
better than "on-demand" queues? Also I'd need to add some way to detect 
the broker restart to cause my script to run - IMHO that all gets just a 
bit messy. I'm already grumbling under my breath about the cron job I've 
had to introduce to periodically attempt to re-create queues and links 
from my source brokers in case they've restarted.

So I'm curious why you seem anti "on demand" creation and how you'd go 
about managing a fairly large and complex environment via 
administratively created queues/bindings given the sort of broker 
restart scenario I describe above.

I look forward to your thoughts.
Cheers,
Frase


Gordon Sim wrote:
> On 12/06/2011 07:46 PM, Fraser Adams wrote:
>> There's some useful docs for x-declare here
>> https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP
>> but it's quite hard to find and doesn't really illustrate that you still
>> need the "auto-delete:True" bit, which is possibly something you've 
>> missed?
>
> BTW I added a page on the wiki to collect some common example 
> addresses for different cases. Comments, suggestions improvements 
> always welcome!
>
> https://cwiki.apache.org/confluence/display/qpid/Addressing+Examples
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.apache.org
>
>


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Gaston Quezada <qu...@gmail.com>.
Dear Gordon,

I appreciate all your support. Your advice on the creation of the queue
worked well.

thank you very much.

Gastón,


2011/12/7 Gordon Sim <gs...@redhat.com>

> On 12/07/2011 08:06 PM, Gaston Quezada wrote:
>
>> Dear Gordon,
>>
>> how to configure the auto-delete-timeout tag in the format BURL
>>
>
> I don't think you can do that with the BURL syntax.
>
>
>  this is my code:
>>
>> String address = "BURL:direct://exchange-**output/" + this.replyTo + "/"
>> +
>> this.replyTo + "?routingkey='"+this.replyTo";
>> AMQDestination dest1 = new AMQAnyDestination(address);
>>
>> if the option is ADRR format, how to defined by the exchange, queue,
>> routingkey a single URL?
>>
>
> I'm not entirely sure what it is you want to do (and I don't know enough
> about how the BURL syntax above is supposed to work to deduce this reliably
> from your string above).
>
> However, assuming that what you want is to create a named queue on-demand
> with the delayed auto-deletion function enabled, and also ensure that the
> queue is bound to a given exchange, you could use the following (with the
> ADDR style syntax and an exchange called my-exchange, a queue called
> my-queue and a routing key with value my-key):
>
> my-queue; {create: always, node:{x-declare:{queue:'my-**queue',auto-delete:True,
> arguments:{'qpid.auto_delete_**timeout':30}}, x-bindings:[{exchange:'my-**exchange',
> key:'my-key'}]}}
>
> Note however that when you create a producer for that address it will
> publish straight to the queue, not go through the exchange. If it's the
> latter you want you could instead use:
>
> my-exchange/my-key; {link:{name:'my-queue', x-declare:{auto-delete:True,
> arguments:{'qpid.auto_delete_**timeout':30}}}}
>
> Hope this helps, but if not perhaps you can give some more context for
> what you are trying to do.
>
>
> ------------------------------**------------------------------**---------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.**apache.org<us...@qpid.apache.org>
>
>


-- 
Gastón Quezada

Re: how to delete queue from jms client

Posted by Gordon Sim <gs...@redhat.com>.
On 12/07/2011 08:06 PM, Gaston Quezada wrote:
> Dear Gordon,
>
> how to configure the auto-delete-timeout tag in the format BURL

I don't think you can do that with the BURL syntax.

> this is my code:
>
> String address = "BURL:direct://exchange-output/" + this.replyTo + "/" +
> this.replyTo + "?routingkey='"+this.replyTo";
> AMQDestination dest1 = new AMQAnyDestination(address);
>
> if the option is ADRR format, how to defined by the exchange, queue,
> routingkey a single URL?

I'm not entirely sure what it is you want to do (and I don't know enough 
about how the BURL syntax above is supposed to work to deduce this 
reliably from your string above).

However, assuming that what you want is to create a named queue 
on-demand with the delayed auto-deletion function enabled, and also 
ensure that the queue is bound to a given exchange, you could use the 
following (with the ADDR style syntax and an exchange called 
my-exchange, a queue called my-queue and a routing key with value my-key):

my-queue; {create: always, 
node:{x-declare:{queue:'my-queue',auto-delete:True, 
arguments:{'qpid.auto_delete_timeout':30}}, 
x-bindings:[{exchange:'my-exchange', key:'my-key'}]}}

Note however that when you create a producer for that address it will 
publish straight to the queue, not go through the exchange. If it's the 
latter you want you could instead use:

my-exchange/my-key; {link:{name:'my-queue', x-declare:{auto-delete:True, 
arguments:{'qpid.auto_delete_timeout':30}}}}

Hope this helps, but if not perhaps you can give some more context for 
what you are trying to do.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Gaston Quezada <qu...@gmail.com>.
Dear Gordon,

how to configure the auto-delete-timeout tag in the format BURL

this is my code:

String address = "BURL:direct://exchange-output/" + this.replyTo + "/" +
this.replyTo + "?routingkey='"+this.replyTo";
AMQDestination dest1 = new AMQAnyDestination(address);

if the option is ADRR format, how to defined by the exchange, queue,
routingkey a single URL?


thanks a lot...

2011/12/7 Gordon Sim <gs...@redhat.com>

> On 12/06/2011 07:46 PM, Fraser Adams wrote:
>
>> There's some useful docs for x-declare here
>> https://cwiki.apache.org/**confluence/display/qpid/Qpid+**
>> extensions+to+AMQP<https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP>
>> but it's quite hard to find and doesn't really illustrate that you still
>> need the "auto-delete:True" bit, which is possibly something you've
>> missed?
>>
>
> BTW I added a page on the wiki to collect some common example addresses
> for different cases. Comments, suggestions improvements always welcome!
>
> https://cwiki.apache.org/**confluence/display/qpid/**Addressing+Examples<https://cwiki.apache.org/confluence/display/qpid/Addressing+Examples>
>
>
> ------------------------------**------------------------------**---------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.**apache.org<us...@qpid.apache.org>
>
>


-- 
Gastón Quezada

Re: how to delete queue from jms client

Posted by Gordon Sim <gs...@redhat.com>.
On 12/06/2011 07:46 PM, Fraser Adams wrote:
> There's some useful docs for x-declare here
> https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP
> but it's quite hard to find and doesn't really illustrate that you still
> need the "auto-delete:True" bit, which is possibly something you've missed?

BTW I added a page on the wiki to collect some common example addresses 
for different cases. Comments, suggestions improvements always welcome!

https://cwiki.apache.org/confluence/display/qpid/Addressing+Examples

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Fraser Adams <fr...@blueyonder.co.uk>.
Hi Gaston,
Try the following syntax (BTW IIRC you need at least Qpid 0.10 for timed 
auto deletes to work):
Also I can't claim credit for the following, this was a response from 
uber-guru Gordon Sim when I asked a similar question back in July


To create a 'shared' queue on-demand:

my-queue; {create: always, node:{x-declare:{auto-delete:True, 
arguments:{'qpid.auto_delete_timeout':120}}}}

To create a subscription queue with the same properties:

my-exchange; {link:{name:my-subscription, x-declare:{auto-delete:True, 
arguments:{'qpid.auto_delete_timeout':120}}}}


Unfortunately the x-declare stuff isn't well documented. I'm not aware 
of the above being documented anywhere, perhaps Gordon knows of a location?

There's some useful docs for x-declare here 
https://cwiki.apache.org/confluence/display/qpid/Qpid+extensions+to+AMQP 
but it's quite hard to find and doesn't really illustrate that you still 
need the "auto-delete:True" bit, which is possibly something you've missed?

That's about the limit of my knowledge..

HTH,
Frase



Gaston Quezada wrote:
> Dear Fraser,
>
> I need to configure the auto-delete arguments, with this parameter:
> arguments:{'qpid.auto_delete_timeout':120}
> When I create the queue, the logs show a empty field argument.
>
> Log:
> main 2011-12-06 <tel:2011-12-06> 15:45:54,562 DEBUG 
> [apache.qpid.transport.Connection] SEND: [conn:db23f1] ch=0 id=2 
> QueueDeclare(queue=10.2.60.69-1671711, alternateExchange=, 
> autoDelete=true, arguments={})
>
>
> Thanks you for your help,
>
>
>
> 2011/12/6 Fraser Adams <fraser.adams@blueyonder.co.uk 
> <ma...@blueyonder.co.uk>>
>
>     Here's some Java code for method invocation. This largely follows
>     a similar pattern to Pavel's C++ example. Note that this method is
>     taken from a much larger QMF2 API that I've written ,so there's
>     some dependencies on other classes (you won't be able to use it
>     directly, but hopefully you'll get the idea especially with
>     Pavel's code - you shouldn't need to tweak much MethodResult
>     really just wraps a Map - see the QMF2 API specification). My QMF2
>     API stuff is actually finished, I've been promising to release it
>     for weeks, but I've been writing a number of tools and utilities
>     to demo it so I thought it'd be best to hold off until those are done.
>
>       /**
>        * Invoke the named method on the named Agent.
>        *
>        * @param agent the Agent to invoke the method on.
>        * @param content an unordered set of key/value pairs comprising
>     the method arguments.
>        * @param replyHandle the correlation handle used to tie
>     asynchronous method requests with responses
>        * @param timeout the time to wait for a reply from the Agent, a
>     value of -1 means use the default timeout
>        * @return the method response Arguments in Map form
>        */
>       public MethodResult invokeMethod(final Agent agent, final
>     Map<String, Object> content,
>                                        final String replyHandle, int
>     timeout) throws QmfException
>       {
>           if (!agent.isActive())
>           {
>               throw new QmfException("Called invokeMethod() with
>     inactive agent");
>           }
>           String agentName = agent.getName();
>           timeout = (timeout < 1) ? _replyTimeout : timeout;
>           try
>           {
>               Destination destination = (replyHandle == null) ?
>     _replyAddress : _asyncReplyAddress;
>               MapMessage request = _syncSession.createMapMessage();
>               request.setJMSReplyTo(destination);
>               request.setJMSCorrelationID(replyHandle);
>               request.setStringProperty("x-amqp-0-10.app-id", "qmf2");
>               request.setStringProperty("method", "request");
>               request.setStringProperty("qmf.opcode", "_method_request");
>               request.setStringProperty("qpid.subject", agentName);
>
>               for (Map.Entry<String, Object> entry : content.entrySet())
>               {
>                   request.setObject(entry.getKey(), entry.getValue());
>               }
>
>               // Wrap request & response in synchronized block in case
>     any other threads invoke a request
>               // it would be somewhat unfortunate if their response
>     got interleaved with ours!!
>               synchronized(this)
>               {
>                   _requester.send(request);
>                   if (replyHandle == null)
>                   { // If this is a synchronous request get the response
>                       Message response = _responder.receive(timeout*1000);
>                       if (response == null)
>                       {
>                           log.info <http://log.info>("No response
>     received in invokeMethod()");
>                           throw new QmfException("No response received
>     for Console.invokeMethod()");
>                       }
>                       MethodResult result = new
>     MethodResult(AMQPMessage.getMap(response));
>                       QmfException exception = result.getQmfException();
>                       if (exception != null)
>                       {
>                           throw exception;
>                       }
>                       return result;
>                   }
>               }
>               // If this is an asynchronous request return without
>     waiting for a response
>               return null;
>           }
>           catch (JMSException jmse)
>           {
>               log.info <http://log.info>("JMSException {} caught in
>     invokeMethod()", jmse.getMessage());
>               throw new QmfException(jmse.getMessage());
>
>           }
>       }
>
>
>
>     Pavel Moravec wrote:
>
>         Hi Gastón,
>         you can use QMF method "delete" with parameters "type"
>         ("queue" in our case) and "name" (name of the queue).
>
>         Here is the code snippet from C++ program I use:
>
>            Connection connection(url/*, connectionOptions*/);
>            try {
>                connection.open();
>                Session session = connection.createSession();
>                Sender sender =
>         session.createSender("qmf.default.direct/broker");
>                Address responseQueue("#reply-queue; {create:always,
>         node:{x-declare:{auto-delete:true}}}");
>                Receiver receiver = session.createReceiver(responseQueue);
>
>                Message message;
>                Variant::Map content;
>                Variant::Map OID;
>                Variant::Map arguments;
>                OID["_object_name"] =
>         "org.apache.qpid.broker:broker:amqp-broker";
>                arguments["type"] = "queue";
>                arguments["name"] = queue_name; // a string of the
>         queue name
>                
>                content["_object_id"] = OID;
>                content["_method_name"] = "delete";
>                content["_arguments"] = arguments;
>                
>                encode(content, message);
>                message.setReplyTo(responseQueue);
>                message.setProperty("x-amqp-0-10.app-id", "qmf2");
>                message.setProperty("qmf.opcode", "_method_request");
>
>                sender.send(message, true);
>                
>                /* check response if the queue was properly deleted */
>                Message response;
>                if
>         (receiver.fetch(response,qpid::messaging::Duration(30000)) ==
>         true)
>                {
>                        qpid::types::Variant::Map recv_props =
>         response.getProperties();
>                        if (recv_props["x-amqp-0-10.app-id"] == "qmf2")
>                                if (recv_props["qmf.opcode"] ==
>         "_method_response")
>                                        std::cout << "Response: OK" <<
>         std::endl;
>                                else if (recv_props["qmf.opcode"] ==
>         "_exception")
>                                        std::cerr << "Error: " <<
>         response.getContent() << std::endl;
>                                else
>                                        std::cerr << "Invalid response
>         received!" << std::endl;
>                        else
>                                std::cerr << "Invalid response not of
>         qmf2 type received!" << std::endl;
>                }
>                else
>                        std::cout << "Timeout: No response received
>         within 30 seconds!" << std::endl;
>
>                connection.close();
>                return 0;
>            } catch(const std::exception& error) {
>                std::cout << error.what() << std::endl;
>                connection.close();
>            }
>
>
>
>         Kind regards,
>         Pavel
>
>         ----- Original Message -----
>          
>
>             From: "Gaston Quezada" <quezada.gaston@gmail.com
>             <ma...@gmail.com>>
>             To: users@qpid.apache.org <ma...@qpid.apache.org>
>             Sent: Monday, December 5, 2011 9:14:10 PM
>             Subject: how to delete queue from jms client
>
>             Hi,
>
>             Im using qpid-client 0.12, and need delete queue from JMS
>             client.
>             the queue is not auto delete
>
>             regards
>
>             --
>             Gastón Quezada
>
>                
>
>
>         ---------------------------------------------------------------------
>         Apache Qpid - AMQP Messaging Implementation
>         Project:      http://qpid.apache.org
>         Use/Interact: mailto:users-subscribe@qpid.apache.org
>         <ma...@qpid.apache.org>
>
>
>          
>
>
>
>     ---------------------------------------------------------------------
>     Apache Qpid - AMQP Messaging Implementation
>     Project:      http://qpid.apache.org
>     Use/Interact: mailto:users-subscribe@qpid.apache.org
>     <ma...@qpid.apache.org>
>
>
>
>
> -- 
> Gastón Quezada
>


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Gaston Quezada <qu...@gmail.com>.
Dear Fraser,

I need to configure the auto-delete arguments, with this parameter:
arguments:{'qpid.auto_delete_timeout':120}
When I create the queue, the logs show a empty field argument.

Log:
main 2011-12-06 15:45:54,562 DEBUG [apache.qpid.transport.Connection] SEND:
[conn:db23f1] ch=0 id=2 QueueDeclare(queue=10.2.60.69-1671711,
alternateExchange=, autoDelete=true, arguments={})


Thanks you for your help,



2011/12/6 Fraser Adams <fr...@blueyonder.co.uk>

> Here's some Java code for method invocation. This largely follows a
> similar pattern to Pavel's C++ example. Note that this method is taken from
> a much larger QMF2 API that I've written ,so there's some dependencies on
> other classes (you won't be able to use it directly, but hopefully you'll
> get the idea especially with Pavel's code - you shouldn't need to tweak
> much MethodResult really just wraps a Map - see the QMF2 API
> specification). My QMF2 API stuff is actually finished, I've been promising
> to release it for weeks, but I've been writing a number of tools and
> utilities to demo it so I thought it'd be best to hold off until those are
> done.
>
>   /**
>    * Invoke the named method on the named Agent.
>    *
>    * @param agent the Agent to invoke the method on.
>    * @param content an unordered set of key/value pairs comprising the
> method arguments.
>    * @param replyHandle the correlation handle used to tie asynchronous
> method requests with responses
>    * @param timeout the time to wait for a reply from the Agent, a value
> of -1 means use the default timeout
>    * @return the method response Arguments in Map form
>    */
>   public MethodResult invokeMethod(final Agent agent, final Map<String,
> Object> content,
>                                    final String replyHandle, int timeout)
> throws QmfException
>   {
>       if (!agent.isActive())
>       {
>           throw new QmfException("Called invokeMethod() with inactive
> agent");
>       }
>       String agentName = agent.getName();
>       timeout = (timeout < 1) ? _replyTimeout : timeout;
>       try
>       {
>           Destination destination = (replyHandle == null) ? _replyAddress
> : _asyncReplyAddress;
>           MapMessage request = _syncSession.createMapMessage(**);
>           request.setJMSReplyTo(**destination);
>           request.setJMSCorrelationID(**replyHandle);
>           request.setStringProperty("x-**amqp-0-10.app-id", "qmf2");
>           request.setStringProperty("**method", "request");
>           request.setStringProperty("**qmf.opcode", "_method_request");
>           request.setStringProperty("**qpid.subject", agentName);
>
>           for (Map.Entry<String, Object> entry : content.entrySet())
>           {
>               request.setObject(entry.**getKey(), entry.getValue());
>           }
>
>           // Wrap request & response in synchronized block in case any
> other threads invoke a request
>           // it would be somewhat unfortunate if their response got
> interleaved with ours!!
>           synchronized(this)
>           {
>               _requester.send(request);
>               if (replyHandle == null)
>               { // If this is a synchronous request get the response
>                   Message response = _responder.receive(timeout***1000);
>                   if (response == null)
>                   {
>                       log.info("No response received in invokeMethod()");
>                       throw new QmfException("No response received for
> Console.invokeMethod()");
>                   }
>                   MethodResult result = new MethodResult(AMQPMessage.**
> getMap(response));
>                   QmfException exception = result.getQmfException();
>                   if (exception != null)
>                   {
>                       throw exception;
>                   }
>                   return result;
>               }
>           }
>           // If this is an asynchronous request return without waiting for
> a response
>           return null;
>       }
>       catch (JMSException jmse)
>       {
>           log.info("JMSException {} caught in invokeMethod()",
> jmse.getMessage());
>           throw new QmfException(jmse.getMessage()**);
>
>       }
>   }
>
>
>
> Pavel Moravec wrote:
>
>> Hi Gastón,
>> you can use QMF method "delete" with parameters "type" ("queue" in our
>> case) and "name" (name of the queue).
>>
>> Here is the code snippet from C++ program I use:
>>
>>    Connection connection(url/*, connectionOptions*/);
>>    try {
>>        connection.open();
>>        Session session = connection.createSession();
>>        Sender sender = session.createSender("qmf.**
>> default.direct/broker");
>>        Address responseQueue("#reply-queue; {create:always,
>> node:{x-declare:{auto-delete:**true}}}");
>>        Receiver receiver = session.createReceiver(**responseQueue);
>>
>>        Message message;
>>        Variant::Map content;
>>        Variant::Map OID;
>>        Variant::Map arguments;
>>        OID["_object_name"] = "org.apache.qpid.broker:**
>> broker:amqp-broker";
>>        arguments["type"] = "queue";
>>        arguments["name"] = queue_name; // a string of the queue name
>>
>>        content["_object_id"] = OID;
>>        content["_method_name"] = "delete";
>>        content["_arguments"] = arguments;
>>
>>        encode(content, message);
>>        message.setReplyTo(**responseQueue);
>>        message.setProperty("x-amqp-0-**10.app-id", "qmf2");
>>        message.setProperty("qmf.**opcode", "_method_request");
>>
>>        sender.send(message, true);
>>
>>        /* check response if the queue was properly deleted */
>>        Message response;
>>        if (receiver.fetch(response,qpid:**:messaging::Duration(30000))
>> == true)
>>        {
>>                qpid::types::Variant::Map recv_props =
>> response.getProperties();
>>                if (recv_props["x-amqp-0-10.app-**id"] == "qmf2")
>>                        if (recv_props["qmf.opcode"] == "_method_response")
>>                                std::cout << "Response: OK" << std::endl;
>>                        else if (recv_props["qmf.opcode"] == "_exception")
>>                                std::cerr << "Error: " <<
>> response.getContent() << std::endl;
>>                        else
>>                                std::cerr << "Invalid response received!"
>> << std::endl;
>>                else
>>                        std::cerr << "Invalid response not of qmf2 type
>> received!" << std::endl;
>>        }
>>        else
>>                std::cout << "Timeout: No response received within 30
>> seconds!" << std::endl;
>>
>>        connection.close();
>>        return 0;
>>    } catch(const std::exception& error) {
>>        std::cout << error.what() << std::endl;
>>        connection.close();
>>    }
>>
>>
>>
>> Kind regards,
>> Pavel
>>
>> ----- Original Message -----
>>
>>
>>> From: "Gaston Quezada" <qu...@gmail.com>
>>> To: users@qpid.apache.org
>>> Sent: Monday, December 5, 2011 9:14:10 PM
>>> Subject: how to delete queue from jms client
>>>
>>> Hi,
>>>
>>> Im using qpid-client 0.12, and need delete queue from JMS client.
>>> the queue is not auto delete
>>>
>>> regards
>>>
>>> --
>>> Gastón Quezada
>>>
>>>
>>>
>>
>> ------------------------------**------------------------------**---------
>> Apache Qpid - AMQP Messaging Implementation
>> Project:      http://qpid.apache.org
>> Use/Interact: mailto:users-subscribe@qpid.**apache.org<us...@qpid.apache.org>
>>
>>
>>
>>
>
>
> ------------------------------**------------------------------**---------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.**apache.org<us...@qpid.apache.org>
>
>


-- 
Gastón Quezada

Re: how to delete queue from jms client

Posted by Fraser Adams <fr...@blueyonder.co.uk>.
Here's some Java code for method invocation. This largely follows a 
similar pattern to Pavel's C++ example. Note that this method is taken 
from a much larger QMF2 API that I've written ,so there's some 
dependencies on other classes (you won't be able to use it directly, but 
hopefully you'll get the idea especially with Pavel's code - you 
shouldn't need to tweak much MethodResult really just wraps a Map - see 
the QMF2 API specification). My QMF2 API stuff is actually finished, 
I've been promising to release it for weeks, but I've been writing a 
number of tools and utilities to demo it so I thought it'd be best to 
hold off until those are done.

    /**
     * Invoke the named method on the named Agent.
     *
     * @param agent the Agent to invoke the method on.
     * @param content an unordered set of key/value pairs comprising the 
method arguments.
     * @param replyHandle the correlation handle used to tie 
asynchronous method requests with responses
     * @param timeout the time to wait for a reply from the Agent, a 
value of -1 means use the default timeout
     * @return the method response Arguments in Map form
     */
    public MethodResult invokeMethod(final Agent agent, final 
Map<String, Object> content,
                                     final String replyHandle, int 
timeout) throws QmfException
    {
        if (!agent.isActive())
        {
            throw new QmfException("Called invokeMethod() with inactive 
agent");
        }
        String agentName = agent.getName();
        timeout = (timeout < 1) ? _replyTimeout : timeout;
        try
        {
            Destination destination = (replyHandle == null) ? 
_replyAddress : _asyncReplyAddress;
            MapMessage request = _syncSession.createMapMessage();
            request.setJMSReplyTo(destination);
            request.setJMSCorrelationID(replyHandle);
            request.setStringProperty("x-amqp-0-10.app-id", "qmf2");
            request.setStringProperty("method", "request");
            request.setStringProperty("qmf.opcode", "_method_request");
            request.setStringProperty("qpid.subject", agentName);

            for (Map.Entry<String, Object> entry : content.entrySet())
            {
                request.setObject(entry.getKey(), entry.getValue());
            }

            // Wrap request & response in synchronized block in case any 
other threads invoke a request
            // it would be somewhat unfortunate if their response got 
interleaved with ours!!
            synchronized(this)
            {
                _requester.send(request);
                if (replyHandle == null)
                { // If this is a synchronous request get the response
                    Message response = _responder.receive(timeout*1000);
                    if (response == null)
                    {
                        log.info("No response received in invokeMethod()");
                        throw new QmfException("No response received for 
Console.invokeMethod()");
                    }
                    MethodResult result = new 
MethodResult(AMQPMessage.getMap(response));
                    QmfException exception = result.getQmfException();
                    if (exception != null)
                    {
                        throw exception;
                    }
                    return result;
                }
            }
            // If this is an asynchronous request return without waiting 
for a response
            return null;
        }
        catch (JMSException jmse)
        {
            log.info("JMSException {} caught in invokeMethod()", 
jmse.getMessage());
            throw new QmfException(jmse.getMessage());
        }
    }



Pavel Moravec wrote:
> Hi Gastón,
> you can use QMF method "delete" with parameters "type" ("queue" in our case) and "name" (name of the queue).
>
> Here is the code snippet from C++ program I use:
>
>     Connection connection(url/*, connectionOptions*/);
>     try {
>         connection.open();
>         Session session = connection.createSession();
>         Sender sender = session.createSender("qmf.default.direct/broker");
>         Address responseQueue("#reply-queue; {create:always, node:{x-declare:{auto-delete:true}}}");
>         Receiver receiver = session.createReceiver(responseQueue);
>
>         Message message;
>         Variant::Map content;
> 	Variant::Map OID;
> 	Variant::Map arguments;
> 	OID["_object_name"] = "org.apache.qpid.broker:broker:amqp-broker";
> 	arguments["type"] = "queue";
> 	arguments["name"] = queue_name; // a string of the queue name
> 	
>         content["_object_id"] = OID;
>         content["_method_name"] = "delete";
>         content["_arguments"] = arguments;
> 	
>         encode(content, message);
> 	message.setReplyTo(responseQueue);
> 	message.setProperty("x-amqp-0-10.app-id", "qmf2");
> 	message.setProperty("qmf.opcode", "_method_request");
>
>         sender.send(message, true);
> 	
>         /* check response if the queue was properly deleted */
> 	Message response;
> 	if (receiver.fetch(response,qpid::messaging::Duration(30000)) == true)
> 	{
> 		qpid::types::Variant::Map recv_props = response.getProperties();
> 		if (recv_props["x-amqp-0-10.app-id"] == "qmf2")
> 			if (recv_props["qmf.opcode"] == "_method_response")
> 				std::cout << "Response: OK" << std::endl;
> 			else if (recv_props["qmf.opcode"] == "_exception")
> 				std::cerr << "Error: " << response.getContent() << std::endl;
> 			else
> 				std::cerr << "Invalid response received!" << std::endl;
> 		else
> 			std::cerr << "Invalid response not of qmf2 type received!" << std::endl;
> 	}
> 	else
> 		std::cout << "Timeout: No response received within 30 seconds!" << std::endl;
>
>         connection.close();
>         return 0;
>     } catch(const std::exception& error) {
>         std::cout << error.what() << std::endl;
>         connection.close();
>     }
>
>
>
> Kind regards,
> Pavel
>
> ----- Original Message -----
>   
>> From: "Gaston Quezada" <qu...@gmail.com>
>> To: users@qpid.apache.org
>> Sent: Monday, December 5, 2011 9:14:10 PM
>> Subject: how to delete queue from jms client
>>
>> Hi,
>>
>> Im using qpid-client 0.12, and need delete queue from JMS client.
>> the queue is not auto delete
>>
>> regards
>>
>> --
>> Gastón Quezada
>>
>>     
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.apache.org
>
>
>   


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: how to delete queue from jms client

Posted by Pavel Moravec <pm...@redhat.com>.
Hi Gastón,
you can use QMF method "delete" with parameters "type" ("queue" in our case) and "name" (name of the queue).

Here is the code snippet from C++ program I use:

    Connection connection(url/*, connectionOptions*/);
    try {
        connection.open();
        Session session = connection.createSession();
        Sender sender = session.createSender("qmf.default.direct/broker");
        Address responseQueue("#reply-queue; {create:always, node:{x-declare:{auto-delete:true}}}");
        Receiver receiver = session.createReceiver(responseQueue);

        Message message;
        Variant::Map content;
	Variant::Map OID;
	Variant::Map arguments;
	OID["_object_name"] = "org.apache.qpid.broker:broker:amqp-broker";
	arguments["type"] = "queue";
	arguments["name"] = queue_name; // a string of the queue name
	
        content["_object_id"] = OID;
        content["_method_name"] = "delete";
        content["_arguments"] = arguments;
	
        encode(content, message);
	message.setReplyTo(responseQueue);
	message.setProperty("x-amqp-0-10.app-id", "qmf2");
	message.setProperty("qmf.opcode", "_method_request");

        sender.send(message, true);
	
        /* check response if the queue was properly deleted */
	Message response;
	if (receiver.fetch(response,qpid::messaging::Duration(30000)) == true)
	{
		qpid::types::Variant::Map recv_props = response.getProperties();
		if (recv_props["x-amqp-0-10.app-id"] == "qmf2")
			if (recv_props["qmf.opcode"] == "_method_response")
				std::cout << "Response: OK" << std::endl;
			else if (recv_props["qmf.opcode"] == "_exception")
				std::cerr << "Error: " << response.getContent() << std::endl;
			else
				std::cerr << "Invalid response received!" << std::endl;
		else
			std::cerr << "Invalid response not of qmf2 type received!" << std::endl;
	}
	else
		std::cout << "Timeout: No response received within 30 seconds!" << std::endl;

        connection.close();
        return 0;
    } catch(const std::exception& error) {
        std::cout << error.what() << std::endl;
        connection.close();
    }



Kind regards,
Pavel

----- Original Message -----
> From: "Gaston Quezada" <qu...@gmail.com>
> To: users@qpid.apache.org
> Sent: Monday, December 5, 2011 9:14:10 PM
> Subject: how to delete queue from jms client
> 
> Hi,
> 
> Im using qpid-client 0.12, and need delete queue from JMS client.
> the queue is not auto delete
> 
> regards
> 
> --
> Gastón Quezada
> 

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org