RabbitMQ发布可以从控制台运行,但不能从浏览器运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ发布可以从控制台运行,但不能从浏览器运行相关的知识,希望对你有一定的参考价值。

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

答案

谢谢@ 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,现在它正在运行。

多谢你们

以上是关于RabbitMQ发布可以从控制台运行,但不能从浏览器运行的主要内容,如果未能解决你的问题,请参考以下文章

为啥 tlstest.paypal.com 可以在浏览器中运行,但不能从我的 PHP 代码中运行(对 Paypal IPN 有用)?

Arduino 可以从控制台读取字节,但不能从 java

可以从命令行成功运行 .exe,但不能从任务计划程序运行

我可以从浏览器“http://localhost:8080/”访问,但不能访问“my_private_ip:8080/”

可以从命令行运行 C++ 代码,但不能从 Visual Studio 中的调试模式运行

View helper 可以在一个控制器中访问,但不能从另一个控制器访问