我用PHP编写了RabbitMQ生产者和消费者(Symfony 4)。使用者使用的是自定义symfony 4命令以及包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如果有比写守护程序更好的解决方案,请告诉我。我只想让使用者在任务加入队列后立即收听和使用任务。
发布于 2019-02-28 11:53:19
解决你的“问题”很简单。你要做的就是,利用监督d,它会监视你在场景后面的命令,如果它倒下了,就把它拿回来。
PHP不擅长长时间运行过程,因此您希望保持您的使用者/工作人员能够合理地(不多)地使用消息。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示例:
https://stackoverflow.com/questions/54905061
复制相似问题