[rabbitmq-discuss] Best way to ping server from client

James Gardner james.gardner at noaa.gov
Tue Dec 17 17:18:56 GMT 2013


Hi Alvaro,

Great to get your reply, I didn't expect to hear from the Creator ;). 
Sorry about the delay, I wanted to think further on this before responding.
The access_request idea was the type of answer I was looking for, but alas:
http://www.rabbitmq.com/undeprecated.html
...so I can't base a solution on it.

The way I'm understanding it, there is a fundamental problem, when 
waiting for a server-push, in being able to detect the difference 
between 'server has nothing to send you' and 'server has just gone away 
forever', hence the need for some sort of heartbeat.
I guess I have come to the conclusion that the only way to tell if a 
server has gone away, is to send a request which should illicit an 
immediate response, hence the need for some sort of ping.
There are only two operations I can think of to use for pings, albeit 
relatively expensive ones:

For consume scripts, a periodic queue declaration call, since they're 
idempotent?
For publish scripts, a periodic QOS call, eg. setting prefetch number? 
(Am I correct in saying this would have no effect on a channel used only 
for publishing?)

Do you or anyone else see any problems with using these? Let me know if 
my thinking is off somehow.

Also, if you would care to, I would like to ask you to comment on:
https://github.com/videlalvaro/php-amqplib/commit/20d50074e6a2904737d23d93e36fd22ece46add2
Not sure I fully understand the exact implications or limitations that 
result from this issue; what are the scenarios in which this would cause 
a problem?

I would like to take the opportunity to thank you and all the 
contributors for a great library; it's been a real life saver since we 
were suffering a memory leak in the PECL AMQP extension. PhpAmqpLib has 
been very solid so far and I greatly prefer its design. It's also nice 
to be able to read the code easily, and package it along with our apps.
Cheers,

James


On 12/09/2013 11:49 AM, Alvaro Videla wrote:
> Hi James,
>
> I've thought about implementing some of the hearbeats exposed by
> RabbitMQ but is not so easy considering PHP's single thread view of
> the world. I could try to approximate timeouts for example, but not
> sure about what errors that could bring.
>
> As a complete hack and trying to answer your question, there's the
> access_request method which in RabbitMQ won't do much: See
> https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L233
> andhttp://hg.rabbitmq.com/rabbitmq-server/file/3e9ad0a5795e/src/rabbit_channel.erl#l646
>
> Regards,
>
> Alvaro
>
> On Mon, Dec 9, 2013 at 6:42 PM, James Gardner<james.gardner at noaa.gov>  wrote:
>> Hi,
>>
>> I need to know the best way to 'ping' an AMQP server from a client (I'm
>> using PhpAmqpLib). We have encountered some situations where the client
>> doesn't realize the server has 'gone away', and hangs for far too long,
>> sometimes indefinitely. Regardless of whether this is a problem with the
>> client library, if I wanted to test the connection by issuing the most
>> benign, inexpensive request, what might that be? Perhaps there is a channel
>> method I can call repeatedly at regular intervals without causing errors,
>> like QOS, or something else? This would be during a consume.
>> Thanks,
>>
>> James Gardner, NWS NIDS
>>
>> _______________________________________________
>> rabbitmq-discuss mailing list
>> rabbitmq-discuss at lists.rabbitmq.com
>> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss



More information about the rabbitmq-discuss mailing list