Как сделать Docker-контейнер для PHP-задачи RabbitMQ - PullRequest
0 голосов
/ 28 февраля 2019

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

1 Ответ

0 голосов
/ 07 июня 2019

В итоге я следовал приведенному здесь учебнику https://docs.docker.com/config/containers/multi-service_container/

Используя supervisord, я смог запланировать несколько пользовательских сценариев PHP-задач с автоматическим перезапуском при сбое и записью в файл журналов Docker для мониторинга.

...