I tried to configure SqsMessageListenerContainerFactory to use VirtualThreadTaskExecutor:
@Bean
SqsMessageListenerContainerFactory<Object> defaultSqsListenerContainerFactory(SqsAsyncClient sqsAsyncClient) {
return SqsMessageListenerContainerFactory.builder()
.configure(options -> options.componentsTaskExecutor(
new VirtualThreadTaskExecutor("sqs-message-listener-container-components-"))
.acknowledgementResultTaskExecutor(new VirtualThreadTaskExecutor(
"sqs-message-listener-container-acknowledgement-result-")))
.sqsAsyncClient(sqsAsyncClient)
.build();
}
But this does not work:
Caused by: java.util.concurrent.CompletionException: io.awspring.cloud.sqs.UnsupportedThreadFactoryException: Custom TaskExecutors must use a MessageExecutionThreadFactory.
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.VirtualThread.run(VirtualThread.java:311) ~[?:?]
Caused by: io.awspring.cloud.sqs.UnsupportedThreadFactoryException: Custom TaskExecutors must use a MessageExecutionThreadFactory.
at io.awspring.cloud.sqs.listener.AbstractPipelineMessageListenerContainer.verifyThreadType(AbstractPipelineMessageListenerContainer.java:146) ~[spring-cloud-aws-sqs-3.0.2.jar:3.0.2]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
Would it be possible to relax this somehow, that VirtualThreadTaskExecutor can be used?
I tried to configure SqsMessageListenerContainerFactory to use VirtualThreadTaskExecutor:
But this does not work:
Would it be possible to relax this somehow, that VirtualThreadTaskExecutor can be used?