diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index a62b72a5bc3de..b3eee58a3388e 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 5.0.0 ----- + * Added support for exchange binding to another exchange in AMQP transport * The `LoggingMiddleware` class has been removed, pass a logger to `SendMessageMiddleware` instead. * made `SendersLocator` require a `ContainerInterface` as 2nd argument diff --git a/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php b/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php index 2540b9d770d0b..4093b75c2f88c 100644 --- a/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/AmqpExt/Connection.php @@ -94,6 +94,9 @@ public function __construct(array $connectionOptions, array $exchangeOptions, ar * * type: Type of exchange (Default: fanout) * * default_publish_routing_key: Routing key to use when publishing, if none is specified on the message * * flags: Exchange flags (Default: AMQP_DURABLE) + * * bindings[name]: An array of exchanges to bind, keyed by the name + * * binding_keys: The binding keys (if any) to bind to this exchange + * * binding_arguments: Arguments to be used while binding the exchange * * arguments: Extra arguments * * delay: * * queue_name_pattern: Pattern to use to create the queues (Default: "delay_%exchange_name%_%routing_key%_%delay%") @@ -423,6 +426,16 @@ public function exchange(): \AMQPExchange $this->amqpExchange->setType($this->exchangeOptions['type'] ?? AMQP_EX_TYPE_FANOUT); $this->amqpExchange->setFlags($this->exchangeOptions['flags'] ?? AMQP_DURABLE); + foreach ($this->exchangeOptions['bindings'] ?? [] as $bindingExchangeName => $bindingExchangeOption) { + $this->amqpExchange->declareExchange(); + + $bindingArguments = $bindingExchangeOption['binding_arguments'] ?? []; + + foreach ($bindingExchangeOption['binding_keys'] ?? [''] as $bindingKey) { + $this->amqpExchange->bind($bindingExchangeName, $bindingKey, $bindingArguments); + } + } + if (isset($this->exchangeOptions['arguments'])) { $this->amqpExchange->setArguments($this->exchangeOptions['arguments']); }
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: