work run retry manually job failed delayed cola php queue

run - PHP ¿Cómo implemento el procesamiento de colas en php



php artisan queue work daemon (6)

Quiero que los datos enviados por mis clientes (por correo postal) se coloquen en una cola y un script php en mi servidor primero verifica si la cola está vacía. Si la cola no está vacía, la secuencia de comandos procesará todos los datos de la cola uno por uno. ¿Cómo hago esto?



Dado que los DB relacionales (Ej: MySQL) son tan flexibles y bien entendidos por los desarrolladores web, se utilizan para muchos tipos de colas de trabajos. Muchas aplicaciones PHP utilizan esta solución como alternativa cuando el almacenamiento en caché de objetos no está configurado. Es el método de último recurso porque es una forma muy costosa de implementar una cola.

Si debe usar MySQL como su cola, uno de los ingenieros de Percona escribió esta entrada de blog sobre la gestión de los posibles puntos débiles.

Si desea la implementación más escalable, recomendaría encarecidamente ZeroMQ. Sin embargo, no es una extensión de PHP predeterminada, o particularmente común. Entonces, para un proyecto en el que no estaría controlando la pila del servidor web: Use APC Objects, Memcache o Memcached, y luego retroceda a una tabla de caché de MySQL.


Echa un vistazo a this .

Utiliza memcached para la persistencia.


El problema con el enfoque cronjob es que el cronjob podría establecerse como máximo en un intervalo de 1 minuto, por lo que hay una demora de 1 minuto en la ejecución del trabajo, si eso es aceptable, está bien, de lo contrario debería usar colas con el script de sondeo.


Esto es algo que podría hacer fácilmente con la biblioteca en enqueue . Primero, puede elegir entre una variedad de transports , como AMQP, STOMP, Redis, Amazon SQS, Sistema de archivos, etc.

En segundo lugar, eso es super fácil de usar. Vamos a empezar desde la instalación:

enqueue/simple-client instalar la biblioteca enqueue/simple-client y transports . Suponiendo que elija el sistema de archivos uno, instale enqueue/fs library. Para resumir:

composer require enqueue/simple-client enqueue/fs

Ahora veamos cómo puedes enviar mensajes desde tu script POST:

<?php // producer.php use Enqueue/SimpleClient/SimpleClient; include __DIR__.''/vendor/autoload.php''; $client = new SimpleClient(''file://''); // the queue will store messages in tmp folder $client->sendEvent(''a_topic'', ''aMessageData'');

El script de consumo:

<?php // consumer.php use Enqueue/SimpleClient/SimpleClient; use Enqueue/Psr/PsrProcessor; use Enqueue/Psr/PsrMessage; include __DIR__.''/vendor/autoload.php''; $client = new SimpleClient(''file://''); $client->bind(''a_topic'', ''a_processor_name'', function(PsrMessage $psrMessage) { // processing logic here return PsrProcessor::ACK; }); // this call is optional but it worth to mention it. // it configures a broker, for example it can create queues and excanges on RabbitMQ side. $client->setupBroker(); $client->consume();

Ejecute tantos procesos de consumer.php como usted mediante el uso de supervisord u otros administradores de procesos, en la computadora local puede ejecutarlo sin ningún paquete o librerías adicionales.

Este es un ejemplo básico y la cola tiene muchas otras características que pueden ser útiles. Si está interesado, revise la documentación de la puesta en cola .