【问题标题】:RabbitMQ publishing works from console but not from browserRabbitMQ 发布工作从控制台但不是从浏览器
【发布时间】: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


【解决方案1】:

感谢@mikens32 的建议。我使用了 try/cath 子句,但没有收到任何消息,无论如何查看 apache error_log 我可以看到这是错误:

[Tue Apr 16 18:51:47 2019] [error] [client 10.0.2.2] PHP Fatal error:  Call to 
undefined function PhpAmqpLib\\Wire\\mb_strlen() in 
/usr/share/php/PhpAmqpLib/Wire/AMQPReader.php on line 63

我不知道为什么使用脚本会起作用,但我发现这个包(具有 mb_strlen 功能的 mbstring)默认情况下未启用。 所以我安装了,重启了apache,现在它可以工作了。

谢谢大家¡¡

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2018-11-06
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2017-11-26
    相关资源
    最近更新 更多