You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Steve Huston <sh...@riverace.com> on 2010/07/02 15:24:44 UTC

RE: Question on use of qpid::messaging::Receiver objects

That did the trick, Ted - thanks!

-Steve

--
Steve Huston, Riverace Corporation
Total Lifecycle Support for Your Networked Applications
http://www.riverace.com


> -----Original Message-----
> From: Ted Ross [mailto:tross@redhat.com] 
> Sent: Tuesday, June 29, 2010 4:37 PM
> To: users@qpid.apache.org
> Subject: Re: Question on use of qpid::messaging::Receiver objects
> 
> 
> 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
> 
> 


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