我正在尝试设置
@SqsListener
工作,但我遇到了这个异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'simpleMessageListenerContainer' defined in org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration: Failed to instantiate [org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer]: Factory method 'simpleMessageListenerContainer' threw exception with message: Error creating bean with name 'queueMessageHandler' defined in org.springframework.cloud.aws.messaging.config.annotation.SqsConfiguration: org/springframework/messaging/handler/annotation/support/PayloadArgumentResolver
........
........
Caused by: java.lang.ClassNotFoundException: org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
... 44 common frames omitted
来自我的 build.gradle:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springframework.cloud:spring-cloud-aws-messaging:2.2.6.RELEASE'
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
implementation 'org.springframework:spring-messaging:6.0.2'
implementation 'io.awspring.cloud:spring-cloud-starter-aws-messaging:2.4.2'
implementation 'io.awspring.cloud:spring-cloud-aws-dependencies:2.4.2'
implementation 'software.amazon.awssdk:sqs:2.18.38'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
我尝试了不同的项目设置,但一切都以:造成:
java.lang.ClassNotFoundException: org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver
我认为
PayloadArgumentResolver
从 Spring 5.2 开始已被弃用,取而代之的是 PayloadMethodArgumentResolver
。
这是一个错误还是依赖问题?
尝试将
spring-messaging
降级为 5.3.24
版本作为解决方法
implementation 'org.springframework:spring-messaging:5.3.24'
Spring Cloud AWS 2.x 版本不支持 Spring Boot 3。请查看此处 https://github.com/awspring/spring-cloud-aws。 Spring Cloud AWS 3.x 版本支持 Spring Boot 3,目前处于 RC2 阶段。
是的,就我而言,我必须使用 PayloadMethodArgumentResolver 并且它有效。
implementation('io.awspring.cloud:spring-cloud-aws-core:3.0.2')
implementation('io.awspring.cloud:spring-cloud-aws-messaging:2.4.4')
implementation('io.awspring.cloud:spring-cloud-starter-aws:2.4.4')
@Bean public QueueMessageHandler queueMessageHandler () {
QueueMessageHandlerFactory queueMsgHandlerFactory = new
QueueMessageHandlerFactory();
queueMsgHandlerFactory.setAmazonSqs(amazonSQSAsync());
QueueMessageHandler queueMessageHandler =
queueMsgHandlerFactory.createQueueMessageHandler();
List<HandlerMethodArgumentResolver> list = new ArrayList<>();
HandlerMethodArgumentResolver resolver = new
PayloadMethodArgumentResolver(new MappingJackson2MessageConverter());
list.add(resolver);
queueMessageHandler.setArgumentResolvers(list);
return queueMessageHandler; }