php - español - RabbitMQ error timeout
rabbitmq php (2)
He configurado RabbitMQ para analizar unas 20.000 solicitudes de una API externa, pero después de unos minutos se agota el tiempo de espera. Se llega a analizar correctamente alrededor de 2000 del total de 20.000 solicitudes.
El archivo de registro dice:
=INFO REPORT==== 16-Feb-2016::17:02:50 ===
accepting AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672)
=ERROR REPORT==== 16-Feb-2016::17:03:21 ===
closing AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672):
{writer,send_failed,{error,timeout}}
Ya he aumentado el valor del latido del corazón, pero no puedo entender por qué se está agotando el tiempo. La configuración es: Ubuntu 14.04, NGINX 1.8.1, RabbitMQ 3.6.0
¡Apreciaría tu tiempo y tu aporte!
Acabo de resolver un problema similar en Python. En mi caso, se resolvió reduciendo el recuento de captación previa en el consumidor, de modo que tenía menos mensajes en cola en su búfer de recepción.
Mi teoría es que el búfer de recepción en el consumidor se llena, y luego RMQ intenta escribir algún otro mensaje en el zócalo del consumidor y no puede hacerlo porque el zócalo del consumidor está lleno. RMQ bloquea en este zócalo, y eventualmente se agota el tiempo de espera y simplemente cierra la conexión al consumidor. Tener una cola de búsqueda previa más pequeña significa que el búfer de recepción del socket no se llena, y RMQ puede escribir cualquier mensaje de contabilidad que estaba tratando de hacer y, por lo tanto, no se agota el tiempo de espera en sus escrituras ni cierra la conexión.
Sin embargo, esto es solo una teoría, pero parece tener validez en mis pruebas.
En Python, la configuración del recuento de captación previa se puede hacer así:
subChannel.basicQos(10);
(Gracias a @ shawn-guo por recordarme que agregue este fragmento de código)
Agregue más a la respuesta de @tul.
subChannel.basicQos(10);
La reducción de la cuenta de captación previa del consumidor elimina esta excepción de tiempo de espera.
El recuento predeterminado de captación previa es ilimitado.