ilango_g wrote:
Hi
I need to write a Listener listening in on an "source/inbound" queue. This
listener will read the contents of the header and based on the content of a
specific header property, the Listener will pick up that message and route
it a certain destination queue that matches the information in the header.
Is there a sample available?
thanks
ilango
I don't see a canned example, but basically you would use the "match"
exchange so bind your
queues to the "amq.match" exchange.
Then when you publish the messages you place the header to match based
on the binding in the
message application headers.
Here are some code snippets to publish to a headers exchange...
--- examples of bind & msg below...
std::string myQueue=session.getId().str();
session.queueDeclare(arg::queue=myQueue, arg::exclusive=true,
arg::autoDelete=true);
session.exchangeBind(arg::exchange="amq.match", arg::queue=myQueue,
arg::arguments=bind);
.... then where you publish the message
session.messageTransfer(arg::content=message,
arg::destination="amq.match", arg::arguments=msg);
match all example
FieldTable bind, msg;
bind.setString("x-match", "all");
bind.setString("foo", "FOO");
bind.setInt("n", 42);
then on message
msg.setString("foo", "FOO");
msg.setInt("n", 42);
match any exmaple
FieldTable bind, msg;
bind.setString("x-match", "any");
bind.setString("foo", "FOO");
bind.setInt("n", 42);
then on message
msg.setString("foo", "FOO");
easiest would be to take the pub/sub example and update it to use the
"amq.match" exchange as above & the update the bindings and message
transfer
with header args
shout if that does not help.
Carl.