Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP(Symfony 4)rabbitmq使用者命令作为守护进程_Php_Symfony_Rabbitmq_Daemon_Systemd - Fatal编程技术网

PHP(Symfony 4)rabbitmq使用者命令作为守护进程

PHP(Symfony 4)rabbitmq使用者命令作为守护进程,php,symfony,rabbitmq,daemon,systemd,Php,Symfony,Rabbitmq,Daemon,Systemd,我用PHP(Symfony 4)编写了RabbitMQ生产者和消费者。消费者作为自定义symfony 4命令与bundle一起使用php amqplib/rabbitmq bundle 这是一个问题。我希望能够将消费者设置为在任务出现在队列中后立即侦听和消费任务 我试图将其作为一次性系统服务运行,但它不起作用 系统D: [Unit] Description=consumer for rabbitmq [Service] Type=oneshot ExecStart=/bin/sh /var/w

我用PHP(Symfony 4)编写了RabbitMQ生产者和消费者。消费者作为自定义symfony 4命令与bundle一起使用php amqplib/rabbitmq bundle


这是一个问题。我希望能够将消费者设置为在任务出现在队列中后立即侦听和消费任务

我试图将其作为一次性系统服务运行,但它不起作用

系统D:

[Unit]
Description=consumer for rabbitmq

[Service]
Type=oneshot
ExecStart=/bin/sh /var/www/public/rabbit.sh
ExecStop=/usr/bin/pkill -f "rabbitmq:consumer"
RemainAfterExit=yes
StandardOutput=journal

[Install]
WantedBy=multi-user.target
如果有比编写守护进程更好的解决方案,请让我知道。我只希望能够设置消费者在任务进入队列后立即侦听和使用任务。

解决“问题”的方法很简单。你所要做的就是,利用它,你可以在幕后监视你的命令,如果你的命令失败了,你可以把它带回来

PHP不擅长长时间运行的流程,因此您希望让您的消费者/工作人员合理地使用足够(不是很多)的消息。e、 100到200就足够了

这就是你要做的:

  • 为您的命令创建一个管理器配置文件-检查下面的示例。如果您想查看文档,请阅读以下属性的具体功能

  • 在管理器中启用此配置

  • 就这些

    [program:name-of-your-command]
    command=php bin/console rabbitmq:consumer -m 100 your_queue --env=prod -DFOREGROUND # Your consumer command
    directory=/path/to/your/app
    autostart=true
    autorestart=true
    startretries=5
    startsecs=0
    user=deployer # Your user
    numprocs=1 # This tells supervisor to run only one consumer
    process_name=%(program_name)s_%(process_num)02d
    stderr_logfile=/path/to/your/app/var/logs/%(program_name)s_stderr.log
    stderr_logfile_maxbytes=10MB
    stdout_logfile=/path/to/your/app/var/logs/%(program_name)s_stdout.log
    stdout_logfile_maxbytes=10MB
    
    示例:


    您可以在后台作为守护进程运行批处理使用者命令
    rabbitmq:batch:consumer
    ,可能会将其设置为在达到内存限制后退出,然后让supervisord自动重新启动deamon。当您执行此操作时,您将始终有一个使用者在后台运行新消息。“我希望能够将使用者设置为在任务出现在队列中后立即侦听和使用任务”-除非我在此处遗漏了一些内容,但使用者命令已经可以这样工作了!e、 g.当您运行
    bin/console rabbitmq:consumer-m 5您的_队列时
    相关的使用者将在消息传入时立即使用它们。检查监控控制器RabbitMQ使用者。和@BentCoder,但在您的情况下,消费者消耗5条消息并死亡,我希望它消耗无限数量的消息,并在启动我的系统时运行它,这就是为什么您需要使用supervisor。当涉及到长时间运行的进程时,PHP不是最好的,因此有理由对数量有限的数量/作业(例如100个)运行您的命令。当命令失效时,主管将再次启动它,这正是您所需要的。事情就是这样做的。你们所要做的就是从我发给你们的第一个链接复制粘贴工作。@BentCoder谢谢你们的帮助,主管为我工作得很好:D