Skip to content

Commit af750e7

Browse files
garyrussellartembilan
authored andcommitted
BoundRabbitChannelAdvice - reject invalid config
Don't allow a `waitForConfirmsTimeout` if the factory is not configured for simple publisher confirmations. Otherwise, a runtime error will occur. **cherry-pick to 5.2.x, 5.1.x** (cherry picked from commit 3e63fe4)
1 parent ad670c0 commit af750e7

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

spring-integration-amqp/src/main/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdvice.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public BoundRabbitChannelAdvice(RabbitOperations operations, @Nullable Duration
7575
Assert.notNull(operations, "'operations' cannot be null");
7676
this.operations = operations;
7777
this.waitForConfirmsTimeout = waitForConfirmsTimeout;
78+
if (this.waitForConfirmsTimeout != null) {
79+
Assert.isTrue(operations.getConnectionFactory().isSimplePublisherConfirms(),
80+
"'waitForConfirmsTimeout' requires a connection factory with simple publisher confirms enabled");
81+
}
7882
}
7983

8084
@Override

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/BoundRabbitChannelAdviceTests.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.integration.amqp.support;
1818

19+
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
1920
import static org.mockito.ArgumentMatchers.any;
2021
import static org.mockito.ArgumentMatchers.anyBoolean;
2122
import static org.mockito.ArgumentMatchers.anyString;
@@ -34,6 +35,7 @@
3435
import org.junit.jupiter.api.Test;
3536

3637
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
38+
import org.springframework.amqp.rabbit.core.RabbitOperations;
3739
import org.springframework.amqp.rabbit.core.RabbitTemplate;
3840
import org.springframework.beans.factory.annotation.Autowired;
3941
import org.springframework.context.annotation.Bean;
@@ -75,6 +77,15 @@ void testAdvice() throws Exception {
7577
verify(this.config.channel).waitForConfirmsOrDie(10_000L);
7678
}
7779

80+
@Test
81+
void validate() {
82+
RabbitOperations template = mock(RabbitOperations.class);
83+
given(template.getConnectionFactory()).willReturn(
84+
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class));
85+
assertThatIllegalArgumentException().isThrownBy(() ->
86+
new BoundRabbitChannelAdvice(template, Duration.ofSeconds(1)));
87+
}
88+
7889
@Configuration
7990
@EnableIntegration
8091
public static class Config {

0 commit comments

Comments
 (0)