【问题标题】:Spring Cloud - SQSSpring Cloud - SQS
【发布时间】:2015-02-27 16:19:07
【问题描述】:

我正在尝试让一个简单的队列处理程序与 Spring Cloud 框架一起使用。但是,我已经成功地让消息处理程序轮询队列。我看到的问题是,当我向队列发布消息时,我的处理程序无法将有效负载解组到所需的 java 对象中。

@MessageMapping("MyMessageQueue")
@SuppressWarnings("UnusedDeclaration")
public void handleCreateListingMessage(@Headers Map<String, String> headers, MyMessage message) {
    //do something with the MyMessage object
}

我得到的错误是

No converter found to convert to class MyMessage

据我了解,@MessageMapping 应该使用 Jackson 将我的 JSON 有效负载解组为 MyMessage 对象。但是它抱怨它找不到转换器。

有人遇到过这个吗?

我使用的是 1.0.0.BUILD-SNAPSHOT 版本的 Spring Cloud。

【问题讨论】:

    标签: java spring amazon-web-services amazon-sqs spring-cloud


    【解决方案1】:

    仅当在 SQS 消息上将 contentType 标头设置为值 application/json 时才使用杰克逊。否则转换器不知道消息的负载中包含什么类型的内容,并且无法选择正确的转换器。

    如果您在reference application 中使用QueueMessagingTemplate#convertAndSend,则会自动设置contentType 标头。

    【讨论】:

    • 非常感谢您解决这个问题。添加 contentType 标头后,我可以确认 MyMessage 对象现在正在按预期创建。
    • 如果您碰巧通过 Spring Cloud 以外的方式(如 aws 控制台或 aws cli)发送 SQS 消息,并且您不知道如何“设置标头”,请不要绝望。只需添加名称为contentType 的消息属性,键入String 和值application/json,这使得Spring Cloud 在接收端拾取Jackson。
    猜你喜欢
    • 2016-06-21
    • 2018-01-24
    • 2018-11-11
    • 2019-08-05
    • 2018-01-31
    • 2020-07-21
    • 2016-09-14
    • 2020-03-02
    • 2015-03-20
    相关资源
    最近更新 更多