Spring Cloud - SQS

Posted

技术标签:

【中文标题】Spring 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。

【问题讨论】:

【参考方案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。

以上是关于Spring Cloud - SQS的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-config-server

Spring Cloud实战Spring Cloud GateWay服务网关

spring-cloud-config——Quick Start

Spring Cloud入门 - Spring Cloud保护机制

spring cloud 与 spring boot 和 spring cloud alibab 版本号对应

整合spring cloud云服务架构 - Spring Cloud简介