From 8c1c8a27d91df571fcb74f69655b86274ed73b28 Mon Sep 17 00:00:00 2001 From: HaiTao Zhang Date: Mon, 12 Aug 2019 19:23:00 -0700 Subject: [PATCH 1/2] Support additional publisher confirm types See gh-17848 --- .../amqp/RabbitAutoConfiguration.java | 2 +- .../autoconfigure/amqp/RabbitProperties.java | 23 +++++++++++++-- .../amqp/RabbitAutoConfigurationTests.java | 28 +++++++++++++++++++ .../spring-boot-dependencies/pom.xml | 2 +- 4 files changed, 51 insertions(+), 4 deletions(-) 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 9258e9052a0..44e02746c35 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 @@ -99,8 +99,8 @@ public class RabbitAutoConfiguration { CachingConnectionFactory factory = new CachingConnectionFactory( getRabbitConnectionFactoryBean(properties).getObject()); map.from(properties::determineAddresses).to(factory::setAddresses); - map.from(properties::isPublisherConfirms).to(factory::setPublisherConfirms); map.from(properties::isPublisherReturns).to(factory::setPublisherReturns); + map.from(properties::getPublisherConfirmType).whenNonNull().to(factory::setPublisherConfirmType); RabbitProperties.Cache.Channel channel = properties.getCache().getChannel(); map.from(channel::getSize).whenNonNull().to(factory::setChannelCacheSize); map.from(channel::getCheckoutTimeout).whenNonNull().as(Duration::toMillis) 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 6443dface35..17501e389e6 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 @@ -23,6 +23,7 @@ import java.util.List; import org.springframework.amqp.core.AcknowledgeMode; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory.CacheMode; +import org.springframework.amqp.rabbit.connection.CachingConnectionFactory.ConfirmType; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; import org.springframework.boot.convert.DurationUnit; @@ -96,6 +97,11 @@ public class RabbitProperties { */ private boolean publisherReturns; + /** + * The type of publisher confirms to use. + */ + private ConfirmType publisherConfirmType; + /** * Connection timeout. Set it to zero to wait forever. */ @@ -275,11 +281,16 @@ public class RabbitProperties { } public boolean isPublisherConfirms() { - return this.publisherConfirms; + return this.publisherConfirmType.equals(ConfirmType.CORRELATED); } + @Deprecated public void setPublisherConfirms(boolean publisherConfirms) { - this.publisherConfirms = publisherConfirms; + if (publisherConfirms) { + this.publisherConfirmType = ConfirmType.CORRELATED; + return; + } + this.publisherConfirmType = ConfirmType.NONE; } public boolean isPublisherReturns() { @@ -294,6 +305,14 @@ public class RabbitProperties { return this.connectionTimeout; } + public void setPublisherConfirmType(ConfirmType publisherConfirmType) { + this.publisherConfirmType = publisherConfirmType; + } + + public ConfirmType getPublisherConfirmType() { + return this.publisherConfirmType; + } + public void setConnectionTimeout(Duration connectionTimeout) { this.connectionTimeout = connectionTimeout; } 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 46fe91e038e..b7fc88f88df 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 @@ -210,6 +210,34 @@ class RabbitAutoConfigurationTests { }); } + @Test + void testConnectionFactorPublisherSettingsUsingConfirmType() { + this.contextRunner.withUserConfiguration(TestConfiguration.class) + .withPropertyValues("spring.rabbitmq.publisher-confirm-type=correlated", + "spring.rabbitmq.publisher-returns=true") + .run((context) -> { + CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class); + RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class); + assertThat(connectionFactory.isPublisherConfirms()).isTrue(); + assertThat(connectionFactory.isPublisherReturns()).isTrue(); + assertThat(getMandatory(rabbitTemplate)).isTrue(); + }); + } + + @Test + void testConnectionFactorySimplePublisherSettingsUsingConfirmType() { + this.contextRunner.withUserConfiguration(TestConfiguration.class) + .withPropertyValues("spring.rabbitmq.publisher-confirm-type=simple", + "spring.rabbitmq.publisher-returns=true") + .run((context) -> { + CachingConnectionFactory connectionFactory = context.getBean(CachingConnectionFactory.class); + RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class); + assertThat(connectionFactory.isSimplePublisherConfirms()).isTrue(); + assertThat(connectionFactory.isPublisherReturns()).isTrue(); + assertThat(getMandatory(rabbitTemplate)).isTrue(); + }); + } + @Test void testRabbitTemplateMessageConverters() { this.contextRunner.withUserConfiguration(MessageConvertersConfiguration.class).run((context) -> { diff --git a/spring-boot-project/spring-boot-dependencies/pom.xml b/spring-boot-project/spring-boot-dependencies/pom.xml index 08034140058..516a2c88694 100644 --- a/spring-boot-project/spring-boot-dependencies/pom.xml +++ b/spring-boot-project/spring-boot-dependencies/pom.xml @@ -182,7 +182,7 @@ 1.7.26 1.24 8.2.0 - 2.2.0.M4 + 2.2.0.BUILD-SNAPSHOT 4.2.0.BUILD-SNAPSHOT 2.0.6.RELEASE Moore-BUILD-SNAPSHOT From 8954fe13e53bd79ab144181b7c4ce5700e91d682 Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Fri, 23 Aug 2019 18:43:27 -0700 Subject: [PATCH 2/2] Polish "Support additional publisher confirm types" See gh-17848 --- .../boot/autoconfigure/amqp/RabbitProperties.java | 15 ++++----------- .../amqp/RabbitAutoConfigurationTests.java | 1 + 2 files changed, 5 insertions(+), 11 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 17501e389e6..615ef47158c 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 @@ -87,18 +87,13 @@ public class RabbitProperties { @DurationUnit(ChronoUnit.SECONDS) private Duration requestedHeartbeat; - /** - * Whether to enable publisher confirms. - */ - private boolean publisherConfirms; - /** * Whether to enable publisher returns. */ private boolean publisherReturns; /** - * The type of publisher confirms to use. + * Type of publisher confirms to use. */ private ConfirmType publisherConfirmType; @@ -280,17 +275,15 @@ public class RabbitProperties { this.requestedHeartbeat = requestedHeartbeat; } + @DeprecatedConfigurationProperty(reason = "replaced to support additional confirm types", + replacement = "spring.rabbitmq.publisher-confirm-type") public boolean isPublisherConfirms() { return this.publisherConfirmType.equals(ConfirmType.CORRELATED); } @Deprecated public void setPublisherConfirms(boolean publisherConfirms) { - if (publisherConfirms) { - this.publisherConfirmType = ConfirmType.CORRELATED; - return; - } - this.publisherConfirmType = ConfirmType.NONE; + this.publisherConfirmType = (publisherConfirms) ? ConfirmType.CORRELATED : ConfirmType.NONE; } public boolean isPublisherReturns() { 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 b7fc88f88df..874219d1150 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 @@ -80,6 +80,7 @@ import static org.mockito.Mockito.verify; * @author Greg Turnquist * @author Stephane Nicoll * @author Gary Russell + * @author HaiTao Zhang */ class RabbitAutoConfigurationTests {