PHP 的 AMQP 无法往队列里写消息
<?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));
$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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
还是对 RabbitMQ 不够熟悉。不过这个功能设计的感觉不太妥,日志中也没有相关报警提示
,并且在高并发 http 中往队列里发消息,这个有点危险,因为链接释放不了,PHP进程数会煞升。PHP 超时后,PHP 进程倒是被回收了,但RabbitMQ还在维护着这个异常的链接不会释放。而且极有可能影响到 Web 的正常响应。不过非极端情况下一般是不会出现磁盘空间不足的,也罢。
磁盘空间不足,确实很意外。
一般会有错误日志吧...GFW 确实讨厌...
即使因为某些原因你不得不做这个GFW, 那么你也可以选择性的放一些“后门”在里面.至少让正常技术交流不成问题吧..一股脑全封了,是省事了,可是也留下了千古骂名.何苦来哉
而且是要执行 publish() 后,PHP 进程就无法退出,就像哪里阻塞了似的。莫非这是哪个包的 bug?