春季核心 AWS 消息收发通知模板未正确绑定消息



我正在使用spring-boot-2.2.1以及AWS SNS & SQS。我正在从SNS向SQS发布一条消息。我能够使用字符串接收消息,但@NotificationMessage返回 null 而不是消息正文。当我使用 spring-boot-1.5.19 时,相同的代码工作正常

绒球.xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws-messaging</artifactId>
</dependency>

主文件

@SpringBootApplication
public class AwsApplication {
public static void main(String[] args) {
SpringApplication.run(AwsApplication.class, args);
}
@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSqs) {
return new QueueMessagingTemplate(amazonSqs);
}
@Bean
public NotificationMessagingTemplate notificationMessagingTemplate(
AmazonSNS amazonSNS) {
return new NotificationMessagingTemplate(amazonSNS);
}
@Bean
public IotClient getIotClient() {
return IotClient.builder()
.credentialsProvider(() -> AwsBasicCredentials.create(AWS_ACCESSKEY, AWS_SECRETKEY))
.credentialsProvider(() -> InstanceProfileCredentialsProvider.create().resolveCredentials())
.region(Region.US_EAST_2)
.build();
}
}

SQS 侦听器类

@SqsListener(value = "${sqs.consumer.name}")
public void receiveSnsSqs(String message, @NotificationMessage Employee employee) {
System.out.println("SNS Consumer received the message::"+message);
System.out.println("SNS Consumer received the notificationMessage::"+employee);
}

在上面的侦听器类中,我能够接收消息,但员工变得空。我直接从 AWS SNS 发送消息。

正如我提到的,它在将 spring 版本迁移到 2.2.1 版本后停止工作之前工作正常。

任何帮助将不胜感激。

我使用的是2.3.0.RELEASE弹簧版本,只是面临同样的问题。 在我把MappingJackson2MessageConverter放在QueueMessageHandlerFactory之后,问题就解决了。 这是我的 QueueMessageHandlerFactory bean。

@Bean
public QueueMessageHandlerFactory queueMessageHandlerFactory() {
MappingJackson2MessageConverter messageConverter = new MappingJackson2MessageConverter();
messageConverter.setStrictContentTypeMatch(false);
messageConverter.getObjectMapper().registerModule(new JavaTimeModule());

QueueMessageHandlerFactory factory = new QueueMessageHandlerFactory();
factory.setMessageConverters(Collections.singletonList(messageConverter));
return factory;
}

最新更新