diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactory.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactory.java index 5972f3b1..7ed067cc 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactory.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactory.java @@ -406,9 +406,14 @@ public class CachingConnectionFactory extends AbstractConnectionFactory */ @Deprecated public void setPublisherConfirms(boolean publisherConfirms) { - Assert.isTrue(!ConfirmType.SIMPLE.equals(this.confirmType), + Assert.isTrue(!publisherConfirms || !ConfirmType.SIMPLE.equals(this.confirmType), "Cannot set both publisherConfirms and simplePublisherConfirms"); - setPublisherConfirmType(ConfirmType.CORRELATED); + if (publisherConfirms) { + setPublisherConfirmType(ConfirmType.CORRELATED); + } + else if (this.confirmType.equals(ConfirmType.CORRELATED)) { + setPublisherConfirmType(ConfirmType.NONE); + } } /** @@ -420,9 +425,14 @@ public class CachingConnectionFactory extends AbstractConnectionFactory */ @Deprecated public void setSimplePublisherConfirms(boolean simplePublisherConfirms) { - Assert.isTrue(!ConfirmType.CORRELATED.equals(this.confirmType), + Assert.isTrue(!simplePublisherConfirms || !ConfirmType.CORRELATED.equals(this.confirmType), "Cannot set both publisherConfirms and simplePublisherConfirms"); - setPublisherConfirmType(ConfirmType.SIMPLE); + if (simplePublisherConfirms) { + setPublisherConfirmType(ConfirmType.SIMPLE); + } + else if (this.confirmType.equals(ConfirmType.SIMPLE)) { + setPublisherConfirmType(ConfirmType.NONE); + } } @Override diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactoryTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactoryTests.java index 2275d419..0f674228 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactoryTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/connection/CachingConnectionFactoryTests.java @@ -1846,4 +1846,34 @@ public class CachingConnectionFactoryTests extends AbstractConnectionFactoryTest assertThat(firstAddress).containsExactly("host1", "host2", "host3"); } + @SuppressWarnings("deprecation") + @Test + public void confirmsSimple() { + CachingConnectionFactory cf = new CachingConnectionFactory(mock(ConnectionFactory.class)); + cf.setSimplePublisherConfirms(false); + assertThat(cf.isSimplePublisherConfirms()).isFalse(); + assertThat(cf.getPublisherConnectionFactory().isSimplePublisherConfirms()).isFalse(); + cf.setSimplePublisherConfirms(true); + assertThat(cf.isSimplePublisherConfirms()).isTrue(); + assertThat(cf.getPublisherConnectionFactory().isSimplePublisherConfirms()).isTrue(); + cf.setSimplePublisherConfirms(false); + assertThat(cf.isSimplePublisherConfirms()).isFalse(); + assertThat(cf.getPublisherConnectionFactory().isSimplePublisherConfirms()).isFalse(); + } + + @SuppressWarnings("deprecation") + @Test + public void confirmsCorrelated() { + CachingConnectionFactory cf = new CachingConnectionFactory(mock(ConnectionFactory.class)); + cf.setPublisherConfirms(false); + assertThat(cf.getPublisherConnectionFactory().isPublisherConfirms()).isFalse(); + assertThat(cf.isPublisherConfirms()).isFalse(); + cf.setPublisherConfirms(true); + assertThat(cf.getPublisherConnectionFactory().isPublisherConfirms()).isTrue(); + assertThat(cf.isPublisherConfirms()).isTrue(); + cf.setPublisherConfirms(false); + assertThat(cf.isPublisherConfirms()).isFalse(); + assertThat(cf.getPublisherConnectionFactory().isPublisherConfirms()).isFalse(); + } + }