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 <[email protected]>
> 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" <[email protected]>
>>> To: [email protected]
>>> 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<[email protected]>
>>
>>
>>
>>
>
>
> ------------------------------**------------------------------**---------
> Apache Qpid - AMQP Messaging Implementation
> Project: http://qpid.apache.org
> Use/Interact:
> mailto:users-subscribe@qpid.**apache.org<[email protected]>
>
>
--
Gastón Quezada