У меня есть настройка LAMP в Docker для использования в качестве API для проекта Cordova, который я разрабатываю.
Я только что изучил PHP-постановку в очередь и RabbitMQ, но выгрузка задач могла бы помочьускорить выполнение задач, таких как загрузка фотографий или отправка электронной почты.
У меня есть этот код для прослушивания и использования сообщений RabbitMQ для отправки электронных писем, однако я не уверен, как запустить его как своего рода демон с PHP.Я также планирую добавить дополнительные очереди, для которых потребуются дополнительные прослушиватели, поэтому моя идея состоит в том, чтобы иметь контейнер задач Docker, выделенный для прослушивания и потребления задач.
use Enqueue\AmqpLib\AmqpConnectionFactory;
use Enqueue\AmqpLib\AmqpContext;
/**
* Inititate queue
*/
emailQueue();
function emailQueue(){
// Create consumer
$context = (new AmqpConnectionFactory(ENQUEUE_OPTIONS))->createContext();
$queue = $context->createQueue('send_email');
$context->declareQueue($queue);
$consumer = $context->createConsumer($queue);
while(true) {
// Get message
$message = $consumer->receive($timeout = 10);
if($message) {
// Extract args
$args = json_decode($message->getBody(), true);
extract($args);
// Send email
$mail = new Mailer();
$mail->setFrom($from, $from_name);
$mail->addAddress($email);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->send();
// Acknowledge
$consumer->acknowledge($message);
}
}
}
Как создать контейнер Docker, который будет запускать мойСценарии PHP для прослушивания и использования задач PHP, чтобы не блокировать выполнение моего основного приложения?