У меня есть настройка 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, чтобы не блокировать выполнение моего основного приложения?
@aminmahmoudi Cron не работал в моем случае, так как в момент сбоя он умирал, а контейнер закрывался, супервизор предоставил более управляемый подход к мониторингу






В итоге я следовал руководству, приведенному здесь https://docs.docker.com/config/containers/мультисервисный_контейнер/
С помощью supervisord я смог запланировать несколько потребительских сценариев задач PHP с автоматическим перезапуском в случае сбоя и записью в файл журналов Docker для мониторинга.
слишком поздно, но, возможно, помогите другим: вы можете создать задание Cron, запустить стаю вашего скрипта