RabbitMQ发布可通过控制台工作,但不能通过浏览器工作

时间:2019-04-16 18:12:44

标签: php apache rabbitmq php-amqplib

我有一个简单的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:获得两条调试消息(Before和After),并返回“ 1”值。另外,我还在RabbitMQ管理中看到一条新消息。 从浏览器中:我只打印“ AMQP连接之前”消息,队列中没有新消息

1 个答案:

答案 0 :(得分: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,现在可以了。

谢谢你们