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