Symfony2和RabbitMqBundle。无法发布消息

时间:2012-10-10 14:58:27

标签: symfony rabbitmq

我正在尝试将syfmony2框架与RabbitMqBundle from here

一起使用

我确信我的rabbitmq服务器已启动并正在运行,我正在根据github上提供的文档执行配置和发布者代码。不幸的是,我不能将任何消息添加到队列中。

我确信我的rabbitmq服务器已启动并正在运行。我有相应的队列命名为symfony配置文件。

有没有人知道出了什么问题?

提前感谢任何建议。

2 个答案:

答案 0 :(得分:10)

嗯......试试这个简单的例子

# app/config.yml
old_sound_rabbit_mq:
    connections: %rabbitmq_connections%
    producers: %rabbitmq_producers%
    consumers: %rabbitmq_consumers%

parameters:
    # connection parameters
    rabbitmq_connections:
        default: { host: 'localhost', port: 5672, user: 'guest', password: 'guest', vhost: '/' }

    # define producers
    rabbitmq_producers:
        sample:
            connection:         default
            exchange_options:   {name: 'exchange_name', type: direct, auto_delete: false, durable: true}

    # define consumers
    rabbitmq_consumers:
        sample:
            connection:         default
            exchange_options:   {name: 'exchange_name', type: direct, auto_delete: false, durable: true}
            queue_options:      {name: 'sample', auto_delete: false}
            callback:           rabbitmq.callback.service

然后你应该定义你的回调服务。随意将其放入app/config.yml

services:
    rabbitmq.callback.service:
        class: RabbitMQ\Callback\Service
是的,是的。你应该写这个回调服务。这里是简单的实现。应该足以理解和检查它是否适合您。

namespace RabbitMQ\Callback;

use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
use PhpAmqpLib\Channel\AMQPChannel;
use PhpAmqpLib\Message\AMQPMessage;

class Service implements ConsumerInterface 
{
    public function execute(AMQPMessage $msg)
    {
        var_dump(unserialize($msg->body));
    }
}     

然后你应该启动rabbitmq服务器,运行consumer并检查是否添加了新的交换和队列。 要运行测试用户,你应该运行

app/console rabbitmq:consumer sample --route="sample"

在您的控制器中(您要将消息发送到rabbitMQ的下一个代码

# get producer service
$producer = $this->get('old_sound_rabbit_mq.sample_producer');
# publish message
$producer->publish(serialize(array('foo'=>'bar','_FOO'=>'_BAR')), 'sample');

希望它或多或少清楚,并会帮助你使用rabbitmq。

PS:如果你有rabbitmq管理插件,它更容易调试。如果没有,请使用rabbitmqctl之类的控制台命令来检查队列/交换/消费者等等......

也很高兴看到你的生产者/消费者的配置。回调服务代码也是如此。

答案 1 :(得分:0)

我在使用此捆绑包发送邮件时遇到了一些问题,我建议您尝试使用SonataNotificationBundle

您还可以安装RabbitMq management plugin以查看排队的消息。