On 10/05/16 11:38, Rabih M wrote:
Hello,
I have an issue while using proton C++ binding 0.12.0. In my use case, I
need to get one and only one message from a distant queue.
But I am not able to do it with proton. I read that in the constructor of
handler I could specify that using prefetch parameter, but it is not
working.
I'm not an expert on the c++ binding, but the prefetch is a window that
is automatically moved. So even if the window is only 1 message wide,
once that message is handled the library will automatically issue credit
to move the window forward.
That said, it is reasonable to expect that closing the connection as you
do on receiving the first message would prevent credit being reissued.
Have you tried closing the link as well? Does that make a difference? If
not I'd suggest this is a bug (the library should not issue extra credit
on a link that the application has requested be closed).
As a workaround, you should be able to disable the credit window be
setting it to 0, then use the receiver::flow() method to add a single
message credit.
Btw, I believe this has changed on the master (and therefore will be
different in the next release). It seems the prefetch is now called
credit_window, and is set through the link_options when creating the
receiver. Also the flow() method is now add_credit.
Again, I repeat I am not an expert on the c++ binding, so apologies if
any of the above is incorrect. Hopefully one of the experts will then
step in and correct me :-)
Example:
Let’s consider I have a queue on the network that contains 2 messages.
Here is my handler’s implementation:
class SimpleReceiver : public proton::handler {
private:
proton::url url;
public:
SimpleReceiver(const proton::url& u) : *handler(1)*, url(u) {}
void on_start(proton::event &e) {
proton::connection conn = e.container().connect(url);
conn.open_receiver(url.path());
}
void on_message(proton::event &e) {
std::cout << e.message().body() << std::endl;
e.connection().close();
}
};
When I run this code the queue is emptied and the client took the 2
messages from the queue.
Could you help me understand why I am getting this behavior?
Thank you,
Rabih
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org