From 0ccfcbe283a2e1bc7a720a6e95a8fa4a447fa0c8 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 15 Mar 2022 13:52:06 -0400 Subject: [PATCH] GH-1433: Fix DMLC Monitor Thread Name Resolves https://github.com/spring-projects/spring-amqp/issues/1433 Used `beanName` instead of `listenerId` (which falls back to `beanName` if `null`). Containers for annotations are not beans per se. **cherry-pick to 2.4.x, 2.3.x** --- .../AbstractMessageListenerContainer.java | 2 +- .../DirectMessageListenerContainer.java | 2 +- ...rectMessageListenerContainerMockTests.java | 23 +++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java index 374f2279..8f0dfe69 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java @@ -156,7 +156,7 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor private TransactionAttribute transactionAttribute = new DefaultTransactionAttribute(); @Nullable - private String beanName; + private String beanName = "not.a.Spring.bean"; private Executor taskExecutor = new SimpleAsyncTaskExecutor(); diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java index 5b92c81c..1823d17d 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java @@ -391,7 +391,7 @@ public class DirectMessageListenerContainer extends AbstractMessageListenerConta protected void doInitialize() { if (this.taskScheduler == null) { ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - threadPoolTaskScheduler.setThreadNamePrefix(getBeanName() + "-consumerMonitor-"); + threadPoolTaskScheduler.setThreadNamePrefix(getListenerId() + "-consumerMonitor-"); threadPoolTaskScheduler.afterPropertiesSet(); this.taskScheduler = threadPoolTaskScheduler; } diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainerMockTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainerMockTests.java index 6d5dd3b8..16580d51 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainerMockTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainerMockTests.java @@ -360,6 +360,29 @@ public class DirectMessageListenerContainerMockTests { container.stop(); } + @Test + void monitorTaskThreadName() { + DirectMessageListenerContainer container = new DirectMessageListenerContainer(mock(ConnectionFactory.class)); + assertThat(container.getListenerId()).isEqualTo("not.a.Spring.bean"); + container.setBeanName("aBean"); + assertThat(container.getListenerId()).isEqualTo("aBean"); + container.setListenerId("id"); + assertThat(container.getListenerId()).isEqualTo("id"); + container.afterPropertiesSet(); + assertThat(container).extracting("taskScheduler") + .extracting("threadNamePrefix") + .asString() + .startsWith("id-consumerMonitor"); + + container = new DirectMessageListenerContainer(mock(ConnectionFactory.class)); + container.setBeanName("aBean"); + container.afterPropertiesSet(); + assertThat(container).extracting("taskScheduler") + .extracting("threadNamePrefix") + .asString() + .startsWith("aBean-consumerMonitor"); + } + private Envelope envelope(long tag) { return new Envelope(tag, false, "", ""); }