PHP(Symfony 4)rabbitmq使用者命令作为守护进程
我用PHP(Symfony 4)编写了RabbitMQ生产者和消费者。消费者作为自定义symfony 4命令与bundle一起使用php amqplib/rabbitmq bundlePHP(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
这是一个问题。我希望能够将消费者设置为在任务出现在队列中后立即侦听和消费任务 我试图将其作为一次性系统服务运行,但它不起作用 系统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