qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gordon Sim <g...@redhat.com>
Subject Re: how to set discardUnroutable in qpid::messaging::message object.
Date Mon, 11 Jul 2011 08:59:48 GMT
On 07/08/2011 07:33 PM, Gang, Litao wrote:
> Hello there,
> I have a simple question on the C++ api.
> I want to handle the case where the message destination is not reachable.  Right now,
w/o doing anything,  I got an error like
> 2011-07-08 10:53:17 warning Exception received from broker: not-found: not-found: Queue
not found: 7efc7c38-7e73-4aa4-9fca-84c0e38ad4b7 (qpid/broker/SessionAdapter.cpp:755) [caused
by 2 \x08:\x01]
> 2011-07-08 10:53:17 error anonymous.4a1e7ce0-52ee-4186-9439-d6bafd54f5b1 error: Queue
7efc7c38-7e73-4aa4-9fca-84c0e38ad4b7 does not exist
> terminate called after throwing an instance of 'qpid::messaging::NotFound'
>    what():  Queue 7efc7c38-7e73-4aa4-9fca-84c0e38ad4b7 does not exist
> It is caused by an unreachable queue.   If I use client::message, I can specify the deliveryProperty,
use setDiscardUnroutable<http://qpid.apache.org/apis/0.10/cpp/html/a00057.html#ae0ce53d8840f12035958f20779af474e>(true).
   But I am using messaging::message class, and the only method I guess I can use is setProperty().
 But I did not find any document, which property name I should use,and how to set it.
> Could anybody shed some lights on this?

The discard-unroutable property is not available in the messaging API. 
In any case it will not help with the situation you are encountering.

The error you are seeing is due to the messaging API implementation 
issuing a passive declare for the queue to which you are creating a 
sender. This is deliberate and is intended to help highlight 
configuration errors.

If the queue is deleted after the sender is created, then you will not 
see this error. It is only triggered by the creation of the sender, not 
the sending of messages.

The discard-unroutable flag will not affect this. Since the default 
exchange does not have an alternate-exchange, the only effect this 
property would have is when the messages transferred also have the 
accept-mode set to explicit. In that case if discard-unroutable is 
false, the message *should* result in a reject (if true it will just be 
discarded). Note that at present the c++ Qpid broker does not actually 
do this reject (see QPID-1490).

At present you would have to catch the exception from creating the 
sender, and (sadly) recreate the session. This is inherited from the 
AMQP specification, but I believe it is the wrong behaviour and that the 
messaging API should keep the session usable (though the underlying AMQP 
session will be lost). I have raised 
https://issues.apache.org/jira/browse/QPID-3179 to cover that, but 
haven't really spent any time looking at the deeper issues yet.

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

View raw message