diff --git a/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainer.java b/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainer.java index 52650e5d7..3cb7e318d 100644 --- a/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainer.java +++ b/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainer.java @@ -122,14 +122,15 @@ public SqsMessageListenerContainer(SqsAsyncClient sqsAsyncClient) { @Override protected Collection> createDefaultComponentFactories() { - Assert.isTrue(allQueuesSameType(), - "SqsMessageListenerContainer must contain either all FIFO or all Standard queues."); return Arrays.asList(new FifoSqsComponentFactory<>(), new StandardSqsComponentFactory<>()); } - private boolean allQueuesSameType() { - return getQueueNames().stream().allMatch(this::isFifoQueue) - || getQueueNames().stream().noneMatch(this::isFifoQueue); + @Override + public void setQueueNames(Collection queueNames) { + Assert.isTrue( + queueNames.stream().allMatch(this::isFifoQueue) || queueNames.stream().noneMatch(this::isFifoQueue), + "SqsMessageListenerContainer must contain either all FIFO or all Standard queues."); + super.setQueueNames(queueNames); } private boolean isFifoQueue(String name) { diff --git a/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainerTests.java b/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainerTests.java index b4bfaa204..c0b7e99ed 100644 --- a/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainerTests.java +++ b/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/listener/SqsMessageListenerContainerTests.java @@ -185,4 +185,14 @@ void shouldNotThrowIfProperCustomExecutorAckResult() { container.stop(); } + @Test + void shouldThrowIfMixedQueueTypes() { + SqsAsyncClient client = mock(SqsAsyncClient.class); + SqsMessageListenerContainer.Builder builder = SqsMessageListenerContainer.builder() + .sqsAsyncClient(client).queueNames("queue", "queue.fifo"); + + assertThatThrownBy(builder::build).isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("must contain either all FIFO or all Standard queues"); + } + }