AMQP套接字和enqueue-php实现存在问题。对于常规的,快速运行的脚本,一切都很好,但是如果我们的进程运行很长时间,则由于套接字丢失,系统将无法对其进行确认。 试图与心跳一起玩,但结果不足。
基本上:如果将心跳设置为默认值:60(当前为15-30),则〜90s脚本很好,但是如果脚本变得更长,它将再次断开连接。
需要一个更好的解决方案,因为事实上可能有24小时以上的运行脚本(不可能分开或并行)
找不到有效的解决方案,如何在执行长时间运行的脚本后保持套接字打开或重新连接。
在另一个线程上,我已阅读到要在执行开始时确认消息,但这再次不是一个很酷的解决方案,并且不能信任系统(该消息已被处理)。另外,我们有一个已实现的重试策略,这意味着由于执行结束时的异常,所有长时间运行的进程都将重新执行。
我们正在将最新版本的php enqueue库与ext-amqp一起使用。
"require": {
"enqueue/psr-queue": "^0.5",
"enqueue/enqueue": "^0.8",
"enqueue/amqp-ext": "^0.8",
"enqueue/amqp-tools": "^0.8",
},
输出为:
2018-11-16T06:07:53+02:00 ERR (3): Consuming interrupted by exception
======================================================================
The application has thrown an exception!
======================================================================
AMQPException
Library error: a socket error occurred
#0 /var/www/vendor/enqueue/amqp-ext/AmqpConsumer.php(161): AMQPQueue->ack(2)