长时间运行的流程无法确认该消息

时间:2018-11-18 15:49:18

标签: php rabbitmq background-process enqueue

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)

0 个答案:

没有答案