【问题标题】:How to inject a producer as a service into a RabbitMQBundle consumer?如何将生产者作为服务注入 RabbitMQBundle 消费者?
【发布时间】:2015-10-20 05:18:17
【问题描述】:

我必须修改一个使用 Symfony 和 RabbitMQ 开发的 php 系统作为排队系统。我不是直接将 RabbitMQ 绑定与 PHP 一起使用,而是将 RabbitMQBundle 用于 Symfony。

我的问题是我不知道如何发布来自消费者的消息。是的,我知道,消费者旨在消费消息,而不是发布消息。但是我有一个多步骤的工作流程,我需要在处理完之前的一些消息后发布新消息。

Symfony 的“魔力”让我无法发现所有东西的连接方式。我一直在阅读有关服务的信息,但据我所知,“生产者”并未在任何地方声明为服务,在我的特殊情况下,我并没有为每个人使用特定的类,而只是将名称绑定到 RabbitMq交换。

在我的控制器中很容易调用那些生产者,我只需要输入类似的东西

$this->get('old_sound_rabbit_mq.my_own_producer')->publish($whatever);

但在消费者中我必须显式注入每个依赖项,我不知道如何注入生产者。

我的 producer 在 rabbitmqbundle 设置中的声明是这样的:

my_own:
        connection:       default
        exchange_options: {name: 'my-own-channel', type: direct}

我的消费者服务在 services.yml 文件中的声明类似于:

my_own_service:
    class: MyOwnBundleBundle\Consumers\MyOwnConsumer
    arguments: ["@logger", "@doctrine_mongodb", "%variable1%", "%variable2%"]
    tags:
        - { name: monolog.logger, channel: my_own_channel }

感谢您的宝贵时间。

【问题讨论】:

    标签: php symfony rabbitmq


    【解决方案1】:

    您可以在您的消费者中注入 rabbitmq 生产者并像往常一样使用它。例如,您可以按如下方式更改消费者服务配置(请参阅最后一个参数):

    my_own_service:
        class: MyOwnBundleBundle\Consumers\MyOwnConsumer
        arguments: ["@logger", "@doctrine_mongodb", "%variable1%", "%variable2%", "@old_sound_rabbit_mq.another_producer"]
        tags:
            - { name: monolog.logger, channel: my_own_channel }
    

    并更改服务的构造器以接受新参数:

    protected $producer;
    
    public function __construct($logger, $doctrine, $var1,$var2, $producer)
    {
        ...
        $this->producer=$producer;
    }
    

    所以将其用作:

    public function execute(AMQPMessage $msg)
        {
           ....
           $mesassage = ....
    
          $this->producer-> publish($message);
    
        }
    

    希望有帮助

    【讨论】:

    • XML 服务配置示例:并且不要忘记您可以在消费者类中键入提示依赖项 class SomeConsumerClass { public function __construct(ProducerInterface $producerService) {
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多