PHP 的 AMQP 无法往队列里写消息

发布于 2021-11-24 23:29:01 字数 1465 浏览 775 评论 4

<?php
$queue = 'AMQP_Test_Queue';
$exchange = 'AMQP_Test_Exchange';

$connectionO = new AMQPConnection(['host' => 'localhost', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest']);
$connectionO->connect();

$channelO = new AMQPChannel($connectionO);

$exchangeO = new AMQPExchange($channelO);
$exchangeO->setName($exchange);
$exchangeO->setType(AMQP_EX_TYPE_DIRECT);
$exchangeO->setFlags(AMQP_DURABLE); // 交换器进行持久化,即 RabbitMQ 重启后会自动重建。
$exchangeO->declareExchange(); // AMQP 1.2.0 由 declare() 改为 declareExchange();

$queueO = new AMQPQueue($channelO);
$queueO->setName($queue);
$queueO->setFlags(AMQP_DURABLE); // 队列进行持久化,即 RabbitMQ 重启后会自动重建。
$queueO->declareQueue(); // AMQP 1.2.0 由 declare() 改为 declareQueue();

$queueO->bind($exchange, 'key');

$result = $exchangeO->publish('Test', 'key', AMQP_NOPARAM, array('delivery_mode' => 2));

echo $result;

function test($a, $a2) {
    print_r($a);
    print_r($a2);
}

$queueO->consume('test');

$connectionO->disconnect();
?>


以上脚本中 publish() 死活写不进队列,但又返回 true,即 $result 值是 true。

CentOS 6.3 & PHP 5.5.1 & RabbitMQ 3.1.3 & PCEL AMQP 1.2.0

很诡异,大家有没有遇到过?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情绪失控 2021-11-25 05:38:32

还是对 RabbitMQ 不够熟悉。不过这个功能设计的感觉不太妥,日志中也没有相关报警提示
,并且在高并发 http 中往队列里发消息,这个有点危险,因为链接释放不了,PHP进程数会煞升。PHP 超时后,PHP 进程倒是被回收了,但RabbitMQ还在维护着这个异常的链接不会释放。而且极有可能影响到 Web 的正常响应。不过非极端情况下一般是不会出现磁盘空间不足的,也罢。

凌乱心跳 2021-11-25 05:37:01

磁盘空间不足,确实很意外。

女中豪杰 2021-11-25 04:34:04

一般会有错误日志吧...GFW 确实讨厌...

即使因为某些原因你不得不做这个GFW, 那么你也可以选择性的放一些“后门”在里面.至少让正常技术交流不成问题吧..一股脑全封了,是省事了,可是也留下了千古骂名.何苦来哉

情栀口红 2021-11-25 04:08:24

而且是要执行 publish() 后,PHP 进程就无法退出,就像哪里阻塞了似的。莫非这是哪个包的 bug?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文