PHP Как реализовать обработку очереди в php

Я хочу, чтобы данные, отправленные моими клиентами (через почту), были помещены в очередь, а скрипт php на моем сервере сначала проверяет, пуста ли очередь. Если очередь не пуста, то скрипт обрабатывает все данные в очереди один за другим. Как это сделать?

Related of "PHP Как реализовать обработку очереди в php"

Вы можете использовать что-то вроде Zero MQ

См. Пример Расмуса Лердорфа .

Вы также можете использовать Gearman для распределения нагрузки.

Это то, что вы можете легко сделать с библиотекой очереди . Во-первых, вы можете выбирать из множества транспортов , таких как AMQP, STOMP, Redis, Amazon SQS, файловая система и т. Д.

Во-вторых, это очень легко использовать. Начнем с установки:

Вы должны установить enqueue/simple-client и один из транспортов . Предполагая, что вы выбрали файловую систему, установите библиотеку enqueue/fs . Обобщить:

 composer require enqueue/simple-client enqueue/fs 

Теперь давайте посмотрим, как вы можете отправлять сообщения со своего сценария 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'); 

Сценарий потребления:

 <?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(); 

Запускайте столько процессов customer.php, сколько вы используете с помощью супервизора или других менеджеров процессов, на локальном компьютере вы можете запускать его без каких-либо дополнительных libs или пакетов.

Это базовый пример, и в enqueue есть много других функций, которые могут пригодиться. Если вам интересно, проверьте документацию в очереди .

Взгляните на это .

Он использует memcached для сохранения.

Вот еще один отличный учебник для этого:

http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project/

Другое решение использует Gearman, который, по-видимому, включен в PHP (это был не последний раз, когда я играл с ним): http://php.net/manual/en/book.gearman.php

Проблема с подходом cronjob заключается в том, что cronjob может в максимальной степени настраиваться на 1-минутный интервал, поэтому в выполнении задания есть 1 минуту, если это приемлемо, тогда это нормально, иначе следует использовать очереди с сценарием опроса.

Поскольку реляционные DB (Ex: MySQL) настолько гибкие и хорошо понятны веб-разработчикам, они используются для многих типов очередей заданий. Многие PHP-приложения используют это решение в качестве резервной копии, когда кеширование объектов не сконфигурировано. Это последний способ, потому что это очень дорогой способ реализации очереди.

Если вы должны использовать MySQL в качестве очереди, один из инженеров Percona написал эту запись в блоге по управлению потенциальными болевыми точками.

Если вам нужна самая масштабируемая реализация, я настоятельно рекомендую ZeroMQ. Однако это не стандартное, или особенно распространенное расширение PHP. Итак, для проекта, в котором вы не будете контролировать стеки веб-серверов: используйте объекты APC, Memcache или Memcached, а затем вернитесь в таблицу кеша MySQL.