qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ted Ross <tr...@redhat.com>
Subject Re: Question on use of qpid::messaging::Receiver objects
Date Tue, 29 Jun 2010 20:37:05 GMT
On 06/29/2010 04:23 PM, Steve Huston wrote:
> I'm working on some code that sends messages to a topic exchange. I
> create a Receiver to get messages by key. When I use
> Receiver::fetch(Message, Duration) all appears ok; when I use
> Session::nextReceiver I never get a message. Here is some lines copied
> out of the real code to show usage:
>
>    qpid::messaging::Connection connection (broker_url_);
>    connection.open ();
>    session = connection.createSession();
>    sender = session.createSender("amq.topic");
>    ...
>    qpid::messaging::Message msg (content, length);
>    std::string dest ("a.b.c", 5);
>    msg.setSubject (dest);
>    sender.send(msg);
>
>    ...  In the receiving part ...
>    std::string addr = "amq.topic/" + "a.b.#";
>    receivers.push_back (session.createReceiver(addr));
> #if 1
>    // This next couple of lines works...
>    qpid::messaging::Message message;
>    if (receivers[0].fetch (message, qpid::messaging::Duration::SECOND *
> 1))
>     { // do something - this works }
> #else
>     // This does not work. nextReceiver() doesn't ever return true
>     qpid::messaging::Receiver r;
>     if (session.nextReceiver (r, qpid::messaging::Duration::SECOND * 1))
>       {
>         qpid::messaging::Message message = r.fetch();
>         // do something
>       }
> #endif
>
> Is this a bug in my code, or in Qpid? If mine, what's the difference
> from fetching a message on a specific receiver and getting the next
> receiver then its message?
>
> Thanks,
> -Steve
>
> --
> Steve Huston, Riverace Corporation
> Total Lifecycle Support for Your Networked Applications
> http://www.riverace.com
>
>
> ---------------------------------------------------------------------
> Apache Qpid - AMQP Messaging Implementation
> Project:      http://qpid.apache.org
> Use/Interact: mailto:users-subscribe@qpid.apache.org
>
>    
Steve,

Try adding r.setCapacity(1) for all receivers r prior to calling 
session.nextReceiver().  Without setting a capacity, no credit will be 
issued to the broker and the local queue will never have any messages in it.

If you call fetch() on a receiver with no capacity, it will issue a 
credit and wait for a message.

-Ted


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Mime
View raw message