On 06/26/2013 12:56 PM, Robbie Gemmell wrote:
I don't have a full answer for this, so I am hoping someone with
familiarity of the C++ client can chime in here to expand on the partial
suggestions I do have:
In the JMS case, the Qpid client actually sends the selector string to the
Java broker at the subscription creation (using an argument key of
"x-filter-jms-selector" with value of the JMS selector string) and it
performs server-side selection, only sending messages to the subscription
which match its selector (with the C++ broker, the JMS client currently
performs the selection client-side). One possibility might be examining
whether the same subscription argument can be sent during consumer creation
with the C++ client, causing the broker to perform the selection for it.
Yes, you could do that using the x-subscribe e.g.
std::string correlationId = ...;
Receiver r = createReceiver("my-queue;
{link:{x-subscribe:{arguments:{x-filter-jms-selector:'JMSCorrelationId =
" + correlationId + "'}}}}");
Another possibility is that I know there has been work ongoing for the
0.22/0.24/beyond releases on the C++ side to allow message selection using
the C++ client and C++ broker, but I don't know specifics about this such
as whether it is all server-side or if client-side is also supported that
you could use against the Java broker (which doesn't currently support the
syntax which would be necessary for doing the equivalent server-side
matching, as I believe the arguments and/or syntax used on the recent work
for the C++ components is slightly different due to being based around a
registered extension for use with AMQP 1.0)
From 0.22 you can specify a selector in the link directly, e.g.
Receiver r = createReceiver("my-queue;
{link:{x-subscribe:{arguments:{x-filter-jms-selector:\"colour in ('red',
'blue')\"}}}}");
For 0-10 however that is set as an argument in subscribe with key
'x-apache-selector'. The only difference in syntax between the
registered extension selector filter and JMS selectors is in the naming
of the special properties (e.g. amqp.correlation-id instead of
JMSCorrelationID)[1]. The client itself doesn't do any parsing or
interpretation of the selector string, that will all be broker side.
[1]
https://svn.apache.org/repos/asf/qpid/trunk/qpid/specs/apache-filters.xml#type-selector-filter
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]