Публикация RabbitMQ работает из консоли, но не из браузера - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть простой код 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», но в очереди нет новых сообщений

1 Ответ

0 голосов
/ 16 апреля 2019

Спасибо @ 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

Я не знаю, почему с помощью сценарияработал, но я обнаружил, что этот пакет (mbstring с функцией mb_strlen) не включен по умолчанию.Итак, я установил, перезапустите apache и теперь он работает.

Спасибо, ребята, ¡¡

...