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**
This commit is contained in:
Gary Russell
2020-04-29 14:56:04 -04:00
committed by Artem Bilan
parent 346762a0e2
commit 3e63fe4eb7
2 changed files with 15 additions and 0 deletions

View File

@@ -75,6 +75,10 @@ public class BoundRabbitChannelAdvice implements HandleMessageAdvice {
Assert.notNull(operations, "'operations' cannot be null");
this.operations = operations;
this.waitForConfirmsTimeout = waitForConfirmsTimeout;
if (this.waitForConfirmsTimeout != null) {
Assert.isTrue(operations.getConnectionFactory().isSimplePublisherConfirms(),
"'waitForConfirmsTimeout' requires a connection factory with simple publisher confirms enabled");
}
}
@Override

View File

@@ -16,6 +16,7 @@
package org.springframework.integration.amqp.support;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
@@ -34,6 +35,7 @@ import java.util.concurrent.ExecutorService;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitOperations;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -75,6 +77,15 @@ public class BoundRabbitChannelAdviceTests {
verify(this.config.channel).waitForConfirmsOrDie(10_000L);
}
@Test
void validate() {
RabbitOperations template = mock(RabbitOperations.class);
given(template.getConnectionFactory()).willReturn(
mock(org.springframework.amqp.rabbit.connection.ConnectionFactory.class));
assertThatIllegalArgumentException().isThrownBy(() ->
new BoundRabbitChannelAdvice(template, Duration.ofSeconds(1)));
}
@Configuration
@EnableIntegration
public static class Config {