From 5f4c60a969e42b9b89b6dbb758b62ebfe970f295 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Fri, 15 Feb 2019 17:41:17 -0500 Subject: [PATCH] GH-905: Fix @RabbitListener Thread Names Fixes https://github.com/spring-projects/spring-amqp/issues/905 Default container thread names are based on the bean name. `@RabbitListener` containers are not beans; use `getListenerId()` instead (which falls back to bean name for other containers). **cherry-pick to all supported branches** --- .../rabbit/listener/AbstractMessageListenerContainer.java | 4 ++-- .../rabbit/annotation/EnableRabbitIntegrationTests.java | 6 +++--- 2 files changed, 5 insertions(+), 5 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 4a58e859..75222300 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 @@ -1197,8 +1197,8 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor if (!this.isExposeListenerChannel() && this.transactionManager != null) { logger.warn("exposeListenerChannel=false is ignored when using a TransactionManager"); } - if (!this.taskExecutorSet && StringUtils.hasText(this.getBeanName())) { - this.taskExecutor = new SimpleAsyncTaskExecutor(this.getBeanName() + "-"); + if (!this.taskExecutorSet && StringUtils.hasText(getListenerId())) { + this.taskExecutor = new SimpleAsyncTaskExecutor(getListenerId() + "-"); this.taskExecutorSet = true; } if (this.transactionManager != null && !isChannelTransacted()) { diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java index 4c9cae27..6d52b6be 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java @@ -241,7 +241,7 @@ public class EnableRabbitIntegrationTests { @Test public void autoDeclare() { - assertEquals("FOO", rabbitTemplate.convertSendAndReceive("auto.exch", "auto.rk", "foo")); + assertEquals("FOOthreadNamer-1", rabbitTemplate.convertSendAndReceive("auto.exch", "auto.rk", "foo")); assertThat(this.myService.channelBoundOk).isTrue(); } @@ -910,7 +910,7 @@ public class EnableRabbitIntegrationTests { this.txRabbitTemplate = txRabbitTemplate; } - @RabbitListener(bindings = @QueueBinding( + @RabbitListener(id = "threadNamer", bindings = @QueueBinding( value = @Queue(value = "auto.declare", autoDelete = "true", admins = "rabbitAdmin"), exchange = @Exchange(value = "auto.exch", autoDelete = "true"), key = "auto.rk"), containerFactory = "txListenerContainerFactory" @@ -919,7 +919,7 @@ public class EnableRabbitIntegrationTests { this.channelBoundOk = this.txRabbitTemplate.execute(c -> { return c.equals(channel); }); - return foo.toUpperCase(); + return foo.toUpperCase() + Thread.currentThread().getName(); } @RabbitListener(queuesToDeclare = @Queue(name = "${jjjj:test.simple.declare}", durable = "true"),