1

我正在尝试使用带有RabbitMq 捆绑包的 Symfony2.2 设置一个简单的 AMQP 发布者/消费者,我正在关注捆绑包页面上的文档

发布者工作正常,我可以在rabbitMq 的网络管理器上看到我的消息。当我尝试使用命令运行消费者时

php app/console rabbitmq:consumer my.api

我收到以下错误:

Call to undefined method My\ApiBundle\Service\ConsumerService::setRoutingKey() in /***/vendor/oldsound/rabbitmq-bundle/OldSound/RabbitMqBundle/Command/BaseConsumerCommand.php on line 91

我的设置:

配置文件

old_sound_rabbit_mq:
    connections:
        my.api:
        host:      %amqp_host%
        port:      %amqp_port%
        user:      %amqp_user%
        password:  %amqp_password%
        vhost:     %amqp_vhost%
    producers:
        my.api:
            connection: my.api
            exchange_options: {name: 'my.api', type: fanout}
    consumers:
        my.api:
            connection: my.api
            exchange_options: {name: 'my.api', type: fanout}
            queue_options:    {name: 'my.api'}
            callback:         my.api

我的\ApiBundle\Service\ConsumerService.php

namespace My\ApiBundle\Service;

use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;

class ConsumerService implements ConsumerInterface
{
    public function execute(\PhpAmqpLib\Message\AMQPMessage $msg)
    {
        return false;
    }
}

我的\ApiBundle\Resources\config\services.xml

<?xml version="1.0" encoding="UTF-8"?>
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="old_sound_rabbit_mq.my.api_consumer" class="My\ApiBundle\Service\ConsumerService"></service>
    </services>
</container>

我的问题是:我的配置或代码有什么问题?

4

3 回答 3

1

无需将您的处理程序注册为服务 - 完全删除 My\ApiBundle\Resources\config\services.xml 定义应该可以解决问题。

于 2013-06-04T15:27:50.873 回答
1

我正在处理同样的问题。问题是我忘记包含 RabbitMQ 配置文件。

您可以将您的解决方案与我的工作存储库进行比较:

https://github.com/petrvacha/rebbitmq-basic

于 2016-05-16T14:50:36.397 回答
0

我不确定文档是否正确..但我通过扩展找到了一种解决方法OldSound\RabbitMqBundle\RabbitMq\BaseConsumer

所以我的代码看起来像:

namespace My\ApiBundle\Service;

use OldSound\RabbitMqBundle\RabbitMq\BaseConsumer;

class ConsumerService extends BaseConsumer
{

}
于 2013-05-28T10:12:42.987 回答