【发布时间】:2019-09-06 21:59:24
【问题描述】:
我有一个简单的 PHP 代码,可以将消息发送到 RabbitMQ 队列,当我直接从控制台 (#php script.php) 执行它时,消息会正确发布,但是当我尝试使用我的浏览器 (http://localhost/script.php) 消息未发送。之前的所有行都已执行,但页面卡在行中
$connection = new AMQPConnection('$ipaddress', 5672, '$user', '$password');
关于为什么会发生这种情况的任何想法?
代码:script.php
<?php
include_once('rabbitmq_function.php');
$result = rabbitmq_send("test");
print_r($result);
代码:rabbitmq_function.php
<?php
require_once '/usr/share/php/PhpAmqpLib/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;
function rabbitmq_send($data)
{
print_r("Before AMQP Connection");
$connection = new AMQPConnection('10.0.0.8', 5672, 'guest', 'guest');
print_r("After AMQP Connection");
$channel = $connection->channel();
$channel->queue_declare('task_queue', false, true, false, false);
$msg = new AMQPMessage(
$data,
array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT)
);
$channel->basic_publish($msg, '', 'task_queue');
$channel->close();
$connection->close();
return true;
}
从 CLI:我得到两条调试消息(之前和之后),并返回“1”值。而且我在 RabbitMQ 管理中看到了一条新消息。 从浏览器:我只打印了“在 AMQP 连接之前”消息,队列中没有新消息
【问题讨论】:
-
你的服务器有防火墙吗?在 RabbitMQ 上,您是否打开了外部端口?
-
只有使用iptables的默认SO防火墙,在RabbitMQ服务器中开放5672端口。无论如何,这似乎不是网络问题,因为代码是相同的,我正在从同一台服务器执行脚本和页面,并且使用脚本正在工作。
-
我也试过用AMQPStreamConnection代替AMQPConnection,但结果是一样的。
-
具有讽刺意味的是,它可能是。本地主机!= 127.0.0.1 != php cli 命令。在代码问题之前,我会打赌它是网络问题。我经常和兔子一起工作,你能发布你完整的 sn-p 来发送消息吗?
-
嗨@Lulceltech,我编辑了问题并添加了我正在使用的代码。
标签: php apache rabbitmq php-amqplib