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?
Aquí hay otro gran tutorial para esto:
La otra solución es usar Gearman, que parece que se han incorporado a PHP (no fue la última vez que jugué con él): Gearman
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 .
Podrías usar algo como Zero MQ
Ver Ejemplo de Rasmus Lerdorf .
También podría considerar usar Gearman para distribuir la carga.