4

我正在寻找一个 PHP 脚本,它从 RabbitMQ 队列中使用(使用 PECL AMQP 模块),然后分叉执行实际工作。

我有代码@ https://gist.github.com/giggsey/6666e67bb0e090eeb5f0

但是当我运行它时,我得到:

11296 密钥:USER.12392 ObjectLength:74 在 2013-03-19 分叉 11296

14:16:22 11277 ack() PHP 致命错误:未捕获的异常

在 tmp/forking.php:10 中带有消息“由对等方重置连接”的“AMQPConnectionException”

堆栈跟踪:

0 tmp/forking.php(10): AMQPQueue->consume(Array)

1 tmp/forking.php(102): 测试->运行()

2 {main} 在第 10 行的 tmp/forking.php 中抛出

致命错误:在第 10 行的 tmp/forking.php 中未捕获的异常 'AMQPConnectionException' 和消息 'Connection reset by peer'

AMQPConnectionException:第 10 行的 tmp/forking.php 中的对等方重置连接

调用堆栈:

0.0006     665008   1. {main}() tmp/forking.php:0

0.0007     665456   2. test->run() tmp/forking.php:102

0.0359     670504   3. AMQPQueue->consume() tmp/forking.php:10
4

1 回答 1

5

您在建立连接后分叉,这意味着子级正在继承连接,这样父级和所有子级最终都使用相同的连接,并且如果任何子级退出(自动关闭连接)或关闭连接,则父级所有兄弟姐妹突然发现他们不再有联系。

所以不要使用:

$connection->connect();

使用记录较少的:

$connection->pconnect();

这将提供一个持久连接,这样当分叉的孩子关闭连接时,父母会自动重新打开它。

于 2013-03-27T15:39:57.190 回答