Ошибка обратного вызова консоли RabbitMQ и Yii - PullRequest
1 голос
/ 07 февраля 2012

Я пытаюсь заставить RabbitMQ работать с консолью Yii для отправки транзакционных электронных писем, но у меня возникают проблемы с получением библиотеки PHP-AMQPLib для работы в Yii.Мой код ниже:

<?php
class RabbitMqCommand extends CConsoleCommand {

    public function actionSendMail() {
        require_once ('/htdocs/code/wwwroot/protected/components/php-amqplib/amqp.inc');

        $conn = new AMQPConnection ( 'localhost', 5672, 'guest', '123456', '/' );
        $ch = $conn->channel ();

        $ch->queue_declare ( 'msgs', false, true, false, false );

        $ch->exchange_declare ( 'router', 'direct', false, true, false );

        $ch->queue_bind ( 'msgs', 'router');

        $ch->basic_consume ( 'msgs', 'consumer', false, false, false, false, 'processMessage' );

            // Loop as long as the channel has callbacks registered
        while ( count ( $ch->callbacks ) ) {
            $ch->wait ();
        }

        $ch->close();
        $conn->close();


    }

    public function processMessage($msg) 
        {
           //process and send email
        }

Когда я пытаюсь выполнить этот код из командной строки следующим образом:

php -q /htdocs/code/wwwroot/protected/yiic RabbitMQ SendMail

Я получаю следующее сообщение об ошибке:

PHP Error[2]: call_user_func() expects parameter 1 to be a valid callback, function 'processMessage' not found or invalid function name
    in file /htdocs/code/wwwroot/protected/components/php-amqplib/amqp.inc at line 1390
#0 /htdocs/code/wwwroot/protected/components/php-amqplib/amqp.inc(1390): call_user_func()
#1 unknown(0): AMQPChannel->basic_deliver()
#2 /htdocs/code/wwwroot/protected/components/php-amqplib/amqp.inc(167): call_user_func()
#3 /htdocs/code/wwwroot/protected/components/php-amqplib/amqp.inc(275): AMQPChannel->dispatch()
#4 /htdocs/code/wwwroot/protected/commands/RabbitMqCommand.php(29): AMQPChannel->wait()
#5 unknown(0): RabbitMqCommand->actionSendMail()
#6 /htdocs/code/framework/console/CConsoleCommand.php(135): ReflectionMethod->invokeArgs()
#7 /htdocs/code/framework/console/CConsoleCommandRunner.php(63): RabbitMqCommand->run()
#8 /htdocs/code/framework/console/CConsoleApplication.php(88): CConsoleCommandRunner->run()
#9 /htdocs/code/framework/base/CApplication.php(158): CConsoleApplication->processRequest()
#10 /htdocs/code/framework/yiic.php(33): CConsoleApplication->run()
#11 /htdocs/code/wwwroot/protected/yiic.php(7): require_once()
#12 /htdocs/code/wwwroot/protected/yiic(4): require_once()

Есть идеи, что я могу делать не так?

1 Ответ

3 голосов
/ 07 февраля 2012

Эта ошибка возникает из-за того, что processMessage является методом экземпляра вашего объекта, но ожидается, что аргумент basic_consume будет глобальным методом PHP.

См. Эту ветку для решений: PHP Вызов метода экземпляра с помощью call_user_func в том же классе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...