在将 RabbitMQ Bundle 用于 Symfony2 时防止在 RabbitMQ 中创建多个连接
Posted
技术标签:
【中文标题】在将 RabbitMQ Bundle 用于 Symfony2 时防止在 RabbitMQ 中创建多个连接【英文标题】:Prevent creating multiple connections in RabbitMQ while using RabbitMQ Bundle for the Symfony2 【发布时间】:2016-06-18 09:12:34 【问题描述】:我正在使用RabbitMQ Bundle for the Symfony2 web framework。我的问题是,在终端运行许多工作人员后,如何避免创建多个连接(to prevent overloading the broker)?在下面的示例中,我运行了两个工作人员并最终拥有两个连接/通道。
config.yml
old_sound_rabbit_mq:
connections:
default:
host: 127.0.0.1
port: 5672
user: guest
password: guest
vhost: /
lazy: true
producers:
order_create_bmw:
connection: default
exchange_options: name: order_create_ex, type: direct
queue_options:
name: order_create_bmw_qu
routing_keys:
- bmw
consumers:
order_create_bmw:
connection: default
exchange_options: name: order_create_ex, type: direct
queue_options:
name: order_create_bmw_qu
routing_keys:
- bmw
callback: application_frontend.consumer.order_create_bmw
services.yml
services:
application_frontend.producer.order_create_bmw:
class: Application\FrontendBundle\Producer\OrderCreateBmwProducer
arguments:
- @old_sound_rabbit_mq.order_create_bmw_producer
制片人
namespace Application\FrontendBundle\Producer;
use Application\FrontendBundle\Entity\Order;
use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface;
class OrderCreateBmwProducer
private $producer;
public function __construct(ProducerInterface $producer)
$this->producer = $producer;
public function add(Order $order)
$message = [
'order_id' => $order->getId(),
'car_model' => $order->getCarModel(),
'timestamp' => date('Y-m-d H:i:s')
];
$this->producer->publish(json_encode($message), 'bmw');
运行工人
$ app/console rabbitmq:consumer order_create_bmw
$ app/console rabbitmq:consumer order_create_bmw
RabbitMQ 管理
【问题讨论】:
【参考方案1】:每个连接到 rabbitmq 的客户端(无论是发布者还是订阅者)都会创建一个连接。除了使用更少的客户端之外,我想不出任何其他方法来实现这一点。我也想不出这样做的理由:) 如果是性能,那么实际上拥有更多订阅者将有助于“清空”交易所(和队列)。
【讨论】:
以上是关于在将 RabbitMQ Bundle 用于 Symfony2 时防止在 RabbitMQ 中创建多个连接的主要内容,如果未能解决你的问题,请参考以下文章