From baa9d129f296e8a2e1f8f5a88c8337fce582f093 Mon Sep 17 00:00:00 2001 From: Jasmine Howard Date: Thu, 1 Oct 2020 17:52:21 -0400 Subject: [PATCH 1/2] Add configuration option for channelRpcTimeout This commit adds a configuration option to configure RabbitConnectionFactory's channelRpcTimeout property. See gh-23564 --- .../autoconfigure/amqp/RabbitAutoConfiguration.java | 2 ++ .../boot/autoconfigure/amqp/RabbitProperties.java | 13 +++++++++++++ .../amqp/RabbitAutoConfigurationTests.java | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java index 967a87541d5..16c8079bf5d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java @@ -149,6 +149,8 @@ public class RabbitAutoConfiguration { } map.from(properties::getConnectionTimeout).whenNonNull().asInt(Duration::toMillis) .to(factory::setConnectionTimeout); + map.from(properties::getChannelRpcTimeout).whenNonNull().asInt(Duration::toMillis) + .to(factory::setChannelRpcTimeout); map.from(credentialsProvider::getIfUnique).whenNonNull().to(factory::setCredentialsProvider); map.from(credentialsRefreshService::getIfUnique).whenNonNull().to(factory::setCredentialsRefreshService); factory.afterPropertiesSet(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java index 3699939f27f..a7e318e9300 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java @@ -119,6 +119,11 @@ public class RabbitProperties { * Connection timeout. Set it to zero to wait forever. */ private Duration connectionTimeout; + + /** + * Channel RPC timeout. + */ + private Duration channelRpcTimeout; /** * Cache configuration. @@ -323,6 +328,10 @@ public class RabbitProperties { public Duration getConnectionTimeout() { return this.connectionTimeout; } + + public Duration getChannelRpcTimeout() { + return this.channelRpcTimeout; + } public void setPublisherConfirmType(ConfirmType publisherConfirmType) { this.publisherConfirmType = publisherConfirmType; @@ -335,6 +344,10 @@ public class RabbitProperties { public void setConnectionTimeout(Duration connectionTimeout) { this.connectionTimeout = connectionTimeout; } + + public void setChannelRpcTimeout(Duration channelRpcTimeout) { + this.channelRpcTimeout = channelRpcTimeout; + } public Cache getCache() { return this.cache; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java index 0ccc5c34d3a..ccd2e7aabe5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java @@ -140,7 +140,7 @@ class RabbitAutoConfigurationTests { .withPropertyValues("spring.rabbitmq.host:remote-server", "spring.rabbitmq.port:9000", "spring.rabbitmq.address-shuffle-mode=random", "spring.rabbitmq.username:alice", "spring.rabbitmq.password:secret", "spring.rabbitmq.virtual_host:/vhost", - "spring.rabbitmq.connection-timeout:123") + "spring.rabbitmq.connection-timeout:123", "spring.rabbitmq.channel-rpc-timeout:140") .run((context) -> { CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class); assertThat(connectionFactory.getHost()).isEqualTo("remote-server"); @@ -150,6 +150,7 @@ class RabbitAutoConfigurationTests { assertThat(connectionFactory.getVirtualHost()).isEqualTo("/vhost"); com.rabbitmq.client.ConnectionFactory rcf = connectionFactory.getRabbitConnectionFactory(); assertThat(rcf.getConnectionTimeout()).isEqualTo(123); + assertThat(rcf.getChannelRpcTimeout()).isEqualTo(140); assertThat((List
) ReflectionTestUtils.getField(connectionFactory, "addresses")).hasSize(1); }); } From c4e1b4f5dd5c012b46406056d6e0b2843197576b Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 2 Oct 2020 10:12:54 +0200 Subject: [PATCH 2/2] Polish "Add configuration option for channelRpcTimeout" See gh-23564 --- .../autoconfigure/amqp/RabbitProperties.java | 16 ++++++++-------- .../amqp/RabbitAutoConfigurationTests.java | 2 ++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java index a7e318e9300..1bbc401fd49 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java @@ -119,11 +119,11 @@ public class RabbitProperties { * Connection timeout. Set it to zero to wait forever. */ private Duration connectionTimeout; - + /** - * Channel RPC timeout. + * Continuation timeout for RPC calls in channels. Set it to zero to wait forever. */ - private Duration channelRpcTimeout; + private Duration channelRpcTimeout = Duration.ofMinutes(10); /** * Cache configuration. @@ -328,10 +328,6 @@ public class RabbitProperties { public Duration getConnectionTimeout() { return this.connectionTimeout; } - - public Duration getChannelRpcTimeout() { - return this.channelRpcTimeout; - } public void setPublisherConfirmType(ConfirmType publisherConfirmType) { this.publisherConfirmType = publisherConfirmType; @@ -344,7 +340,11 @@ public class RabbitProperties { public void setConnectionTimeout(Duration connectionTimeout) { this.connectionTimeout = connectionTimeout; } - + + public Duration getChannelRpcTimeout() { + return this.channelRpcTimeout; + } + public void setChannelRpcTimeout(Duration channelRpcTimeout) { this.channelRpcTimeout = channelRpcTimeout; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java index ccd2e7aabe5..811c9111be2 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java @@ -108,6 +108,8 @@ class RabbitAutoConfigurationTests { .isEqualTo(com.rabbitmq.client.ConnectionFactory.DEFAULT_CHANNEL_MAX); assertThat(connectionFactory.isPublisherConfirms()).isFalse(); assertThat(connectionFactory.isPublisherReturns()).isFalse(); + assertThat(connectionFactory.getRabbitConnectionFactory().getChannelRpcTimeout()) + .isEqualTo(com.rabbitmq.client.ConnectionFactory.DEFAULT_CHANNEL_RPC_TIMEOUT); assertThat(context.containsBean("rabbitListenerContainerFactory")) .as("Listener container factory should be created by default").isTrue(); });