如何制作用于RabbitMQ PHP任务消费的Docker容器

时间:2019-02-28 01:19:26

标签: php docker rabbitmq daemon

我在Docker中有一个LAMP设置,用作我正在开发的Cordova项目的API。

我只是研究了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 :(得分:0)

我最终遵循了此处https://docs.docker.com/config/containers/multi-service_container/

给出的教程

使用主管,我能够安排多个PHP任务使用者脚本,这些脚本在发生故障时会自动重新启动,并记录到Docker日志文件中进行监视。