Hmm, I'm sorry to hear that. I believe I was trying it and it worked
(I'm not in the office any more, so I cannot try it again). However,
if I tried it, it was definitely with Python, not in C++. I thought
the addresses independent on the programming language / API, but
either they aren't or there is some bug in the C++ API causing this
not to work.

Regards
JAkub

On Mon, Apr 25, 2011 at 20:34, David Hawthorne <[email protected]> wrote:
> To clarify, by "did not work" I mean it created the queue but I could not 
> create a second receiver on it because it was declared exclusive, in spite of 
> having exclusive: false in the link x-declare block.
>
> On Apr 25, 2011, at 11:32 AM, David Hawthorne wrote:
>
>> Interesting.  What is the difference between the values give in the node 
>> x-declare block and the link x-declare block?  They both refer to values 
>> used in queueDeclare, but it seems like they are not equivalent.
>>
>> The example did not work as given, but I'm working with it to try to figure 
>> out the right combination of node and link x-declare statements to make it 
>> work.
>>
>> On Apr 25, 2011, at 1:58 AM, Jakub Scholz wrote:
>>
>>> Hi David,
>>>
>>> I believe you are looking for an address similar to this:
>>>
>>> amq.topic/foo.#; {create: receiver, link: {name: 'foo_reciver_queue' ,
>>> x-declare: { auto-delete: true, exclusive: false } } }
>>>
>>> It binds the topic exchange to a queue created by the receiver and
>>> named foo_receiver_queue using the key foo.#. This queue is created as
>>> auto-delete non-exclusive queue. You may want to change the queue
>>> parameters according to your needs. But you have to keep the
>>> exclusive: false parameter, else you will be unable to create multiple
>>> receivers on this queue.
>>>
>>> I guess the getName() method of the receiver probably returns just
>>> some receiver name, not the queue name.
>>>
>>> Hope it helps ...
>>>
>>> Regards
>>> JAkub
>>>
>>> On Sun, Apr 24, 2011 at 22:18, David Hawthorne <[email protected]> wrote:
>>>> 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]
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> Apache Qpid - AMQP Messaging Implementation
>>> Project:      http://qpid.apache.org
>>> Use/Interact: mailto:[email protected]
>>>
>>
>>
>> ---------------------------------------------------------------------
>> Apache Qpid - AMQP Messaging Implementation
>> Project:      http://qpid.apache.org
>> Use/Interact: mailto:[email protected]
>>
>
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:[email protected]
>
>

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to