From 6fab5fbc4aacf89f18dfe986dd983ad0435bef2d Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Mon, 16 Sep 2024 23:39:12 +0700 Subject: [PATCH] GH-2815: Fix `RabbitAdmin` for static `Declarables Fixes: #2815 Issue link: https://github.com/spring-projects/spring-amqp/issues/2815 When rabbitmq resets, `RabbitAdmin#initialize` calls `redeclareManualDeclarables()` first, before it continues with re-declaring statically configured declarations. This means that explicitly declared Bindings to statically declared Exchanges can never be restored, because the Exchange has to exist in order for the Binding declaration to succeed. * Call new `redeclareBeanDeclarables()` before `redeclareManualDeclarables()` (cherry picked from commit 2ebc7ef1234d5a6eced160bb132f392fbe84f92a) --- .../org/springframework/amqp/rabbit/core/RabbitAdmin.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitAdmin.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitAdmin.java index a88392b6..dbefa231 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitAdmin.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/core/RabbitAdmin.java @@ -81,6 +81,7 @@ import com.rabbitmq.client.Channel; * @author Gary Russell * @author Artem Bilan * @author Christian Tzolov + * @author Ngoc Nhan */ @ManagedResource(description = "Admin Tasks") public class RabbitAdmin implements AmqpAdmin, ApplicationContextAware, ApplicationEventPublisherAware, @@ -648,8 +649,14 @@ public class RabbitAdmin implements AmqpAdmin, ApplicationContextAware, Applicat @Override // NOSONAR complexity public void initialize() { + redeclareBeanDeclarables(); redeclareManualDeclarables(); + } + /** + * Process bean declarables. + */ + private void redeclareBeanDeclarables() { if (this.applicationContext == null) { this.logger.debug("no ApplicationContext has been set, cannot auto-declare Exchanges, Queues, and Bindings"); return;