繁体   English   中英

Spring 云 SQS 监听器接收到空 POJO

[英]Spring Cloud SQS listener receives empty POJO

我使用 Spring Cloud: spring-cloud-aws-messaging来实现 SNS + SQS。 我有 SQS 监听器:

 @Transactional
  @SqsListener(value = "${sqs.queue.name}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
  public void processMessage(UserEvent userEvent) {
    try {
      System.out.println(userEvent);
    } catch (Exception e) {
      LOG.error(e);
    }
  }

带配置

 @Bean
  public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
    return new QueueMessagingTemplate(amazonSQSAsync);
  }

  @Bean
  public QueueMessageHandlerFactory queueMessageHandlerFactory(
      final ObjectMapper mapper, final AmazonSQSAsync amazonSQSAsync){

    final QueueMessageHandlerFactory queueHandlerFactory =
        new QueueMessageHandlerFactory();
    queueHandlerFactory.setAmazonSqs(amazonSQSAsync);
    queueHandlerFactory.setArgumentResolvers(Collections.singletonList(
        new PayloadMethodArgumentResolver(jackson2MessageConverter(mapper))
    ));
    return queueHandlerFactory;
  }

  private MessageConverter jackson2MessageConverter(final ObjectMapper mapper){
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setObjectMapper(mapper);
    return converter;
  }

UserEvent 是一个带有 setter/getter 和默认构造函数的 POJO。 问题是 SQS 侦听器收到空的 object。 我怀疑QueueMessageHandlerFactory配置错误。 如果我将 SQS 侦听器参数更改为字符串,我会收到消息:

{
"UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:111111111111:topic-name:6ea68f67-306c-4385-858b-laskdjfsd123",
"SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-1ff5318643ec183fbaddaa2a969abadf.pem",
"Signature" : "Ikjay6NCGmwhyNothdvNVWNps1OMOcBuCGT+trYqVzdSLX79cCBgZeX5ZynTlC+ewsRYFH2bVW521pK88j+Z3/uDxGBrMkd6SZ/GBF1Rnl5pB4UG4aZXLP3uxE0MDX+lUPX2aCu6ta/ii3gI7vxtqKoUzqTt8aNHVMT5GG9xjLg2yIxW97MKRLbSHug5NXetlSwYdNuwq/P85Eur6BkufpLg5aummfAwfpR9ZaNdFEqjBl0nYj96q46w6UKFHaZDEgeit1TMBYjCKM3VzuyMSOPQ==",
"SignatureVersion" : "1",
"Timestamp" : "2022-03-03T14:44:49.000Z",
"Message" : "{\"id\":\"1\",\"name\":\"Alex\"}",
"TopicArn" : "arn:aws:sns:us-west-2:111111111111:topic-name",
"MessageId" : "c765b712-d774-558a-a070-ed8801d5e34r",
"Type" : "Notification"
}

请让我知道我做错了什么。

确保您在 SNS 订阅中启用了“原始消息传递”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM