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:
committed by
Artem Bilan
parent
346762a0e2
commit
3e63fe4eb7
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user