微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何将生产者作为服务注入RabbitMQBundle使用者?

我必须修改用Symfony和RabbitMQ开发的PHP系统作为排队系统.我不是直接使用PHP的RabbitMQ绑定,而是使用适用于Symfony的RabbitMQBundle.

我的问题是我不知道如何从消费者那里发布消息.是的,我知道,消费者的目的是消费消息,而不是发布消息.但我有一个多步骤的工作流程,我需要在处理完一些先前的消息后发布新消息.

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

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

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

但在消费者中我必须明确地注入每一个依赖,我不知道如何注入生产者.

我的生产者在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 }

感谢您的时间.

解决方法:

您可以在您的消费者中注入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);

    }

希望这有帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐