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]

Reply via email to