我正在使用RabbitMQ开发可扩展系统。我在Symfony2(PHP)中编写了应用程序,php工作者遇到了问题,他们失去了连接。
我从这篇文章中受到启发:https://blog.vandenbrand.org/2015/01/09/symfony2-and-rabbitmq-lessons-learned/
设置我的工作人员并解决PHP工作人员的问题。
默认设置是使用Go编写的worker,它将数据传递给PHP命令行处理程序脚本。实际上它工作得非常好,但是当我用15k消息和6个工作人员进行负载测试时,系统在工作6-10小时后卡住并且消息状态为“未打包”。 RabbitMQ和工人之间的联系还活着。
这是我使用的go工作者(它表现为包装器):https://github.com/ricbra/rabbitmq-cli-consumer
这是此工作人员的配置:
[rabbitmq]
host = HOSTNAME
username = USERNAME
password = PASSWORD
vhost=/
port=5672
queue=fetch_product_queue
compression=Off
[prefetch]
count=1
global=Off
[exchange]
name=send_product
type=direct
autodelete=Off
durable=On
[logs]
error = /tmp/fetch_product_error.log
info = /tmp/fetch_product_info.log
我相信这不是一个开发问题,但它更可能是一个RabbitMQ配置问题,因为它适用于数千条消息。
Go worker使用此库:streadway / amqp,它支持AMQP 0.9.1。 RabbitMQ服务器版本是3.6.1,默认配置(我不使用配置文件)。
服务器在DigitalOcean中运行,具有2个内核,2 GB RAM。
工作人员被放置在具有512 MB RAM和1个核心的6个DO实例上。 感谢您的帮助。