I'm attempting to use the 0.8 messaging API and I don't see a way to specify
the name of the queue to create or listen to using this API. With the older
API I could declare the queue with a known name, and thus have multiple clients
draining the same queue using the same binding (round-robin consumer pattern).
It doesn't look like I can get the name of the queue created by createReceiver
using Receiver.getName, either, because it only returns the name of the
exchange. e.g., if I have an exchange named "test", and I create a receiver
with an address like "test/foobar.#; { create: always }", Receiver.getName()
returns "test", whereas qpidd -t shows me the queue is actually
"test_e54e7eff-3ae8-4508-b23a-0a0d8b2ef65f".
This almost leads me to the conclusion that it is not meant to be possible to
round-robin pop messages off of a queue created on a topic exchange. Is that
the case?
code example:
{
string queue_address = "test/foo.# ; { create: always, delete:
always, node:{ type: topic, durable: false }}";
qpid::messaging::Connection connection("127.0.0.1:5672");
connection.open();
qpid::messaging::Session session = connection.createSession();
qpid::messaging::Receiver receiver =
session.createReceiver(queue_address);
// attempt to create a second receiver listening on the same
queue to see what happens
qpid::messaging::Receiver receiver2 =
session.createReceiver(queue_address);
cout << "receiver name is " << receiver.getName() << endl;
cout << "receiver2 name is " << receiver2.getName() << endl;
qpid::messaging::Message message;
qpid::messaging::Duration timeout =
qpid::messaging::Duration::SECOND;
int messages_received = 0;
while (receiver.fetch(msg, timeout))
messages_received++;
while (receiver2.fetch(msg, timeout))
messages_received++;
cout << "total messages received is " << messages_received <<
endl;
}
receiver name is test
receiver2 name is test_2
total messages received is 4, expected 2
I keep a count of the total messages received from all receivers, and I'm
sending exactly 2 messages. The total messages received should equal 2, but in
this case it equals 4 because each receiver creates a new queue with a unique
name and the messages are delivered to each of those, effectively preventing
the round-robin capability of the old API.
Any help you can give would be greatly appreciated.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]