0

我有一个简单的 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 连接之前”消息,队列中没有新消息

4

1 回答 1

0

感谢@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,现在它可以工作了。

多谢你们

于 2019-04-16T20:07:52.097 回答