Shashank Gupta
Shashank Gupta

Reputation: 347

Spring Cloud AWS : SqsMessageListenerContainer must contain either all FIFO or all Standard queues

I am trying to migrate one of my microservice from Spring Boot 2.7.x to Spring Boot 3.2.x.
Currently I am planning to use:

Included dependencies in my gradle file

implementation 'io.awspring.cloud:spring-cloud-aws-starter'
implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs'

and I have few listeners in my service for which I am using @SqsListener

@SqsListener(value = "${custom.queue}", acknowledgementMode = ON_SUCCESS)
public void queuelistener(String requestPayload) {
    try {
        processData(requestPayload);
    } catch (Exception e) {
        log.error("Exception occured in request", e.getMessage());
    }
}

One of the listener is for a FIFO queue and remaining listeners are for Standard Queues.
When I am trying to start my application I am getting an error that "SqsMessageListenerContainer must contain either all FIFO or all Standard queues"

org.springframework.context.ApplicationContextException: Failed to start bean 'io.awspring.cloud.messaging.internalEndpointRegistryBeanName'
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:291)
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:471)
    at java.base/java.lang.Iterable.forEach(Iterable.java:75)
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:260)
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:205)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:981)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    at com.rubix.crawler.CrawlerServiceApplication.main(CrawlerServiceApplication.java:12)
Caused by: java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: SqsMessageListenerContainer must contain either all FIFO or all Standard queues.
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1807)
    at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalArgumentException: SqsMessageListenerContainer must contain either all FIFO or all Standard queues.
    at org.springframework.util.Assert.isTrue(Assert.java:111)
    at io.awspring.cloud.sqs.listener.SqsMessageListenerContainer.createDefaultComponentFactories(SqsMessageListenerContainer.java:125)
    at io.awspring.cloud.sqs.listener.AbstractPipelineMessageListenerContainer.getComponentFactories(AbstractPipelineMessageListenerContainer.java:110)
    at io.awspring.cloud.sqs.listener.AbstractPipelineMessageListenerContainer.determineComponentFactory(AbstractPipelineMessageListenerContainer.java:100)
    at io.awspring.cloud.sqs.listener.AbstractPipelineMessageListenerContainer.doStart(AbstractPipelineMessageListenerContainer.java:91)
    at io.awspring.cloud.sqs.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:287)
    at io.awspring.cloud.sqs.LifecycleHandler.lambda$manageLifecycle$4(LifecycleHandler.java:76)
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
    at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at io.awspring.cloud.sqs.LifecycleHandler.manageLifecycle(LifecycleHandler.java:74)
    at io.awspring.cloud.sqs.LifecycleHandler.lambda$manageLifecycle$0(LifecycleHandler.java:81)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
    ... 1 common frames omitted

Is there anyway to configure SqsMessageListenerContainer to have listeners for both types of queues.

Thanks in advance.

Upvotes: 0

Views: 240

Answers (0)

Related Questions