[rabbitmq-discuss] RabbitMQ 1.7.0 close the cnx when consumer don't ack deliveries during 30s
Simon MacMullen
simon at rabbitmq.com
Thu Jul 15 16:09:07 BST 2010
On 15/07/10 15:35, Vincent Barat wrote:
> I got my fix: here is what I do:
>
> 1- I use basicQos() to be sure that the server will not send "too many"
> messages (actually, I have checked that basicQos() does not offers a
> guarantee on the number of un-acknoledged messages sent, since I
> actually receive much more than the parameter I give, but it seems at
> least to limit the amount of messages, maybe there is a bug here ?).
Hi Vincent. I don't think there's a bug in our handling of basic.qos -
it's been around for a while and a lot of people are using it successfully.
I notice that in onNewChannel():
@Override
protected void onNewChannel(Channel channel) throws IOException
{
super.onNewChannel(channel);
/*
* Configure the channel to send not more than a given amount of
unacknowledged messages. This
* avoid at the same time to buffer too many messages (which could
exhaust memory) and to block
* in handleDelivery() (which could brake the connection).
*/
channel.basicQos(capacity);
}
You invoke channel.basicQos() after super.onNewChannel(). Does
super.onNewChannel() invoke channel.basicConsume() by any chance? If it
does so then the server can start sending an unlimited number of
messages as soon as it receives this message - it'll only start limiting
the number it sends out after receiving basic.qos. Therefore it's
usually better to send basic.qos before basic.consume.
Cheers, Simon
--
Simon MacMullen
Staff Engineer, RabbitMQ
SpringSource, a division of VMware
More information about the rabbitmq-discuss
mailing list