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实战Spring Cloud GateWay服务网关
spring-cloud-config——Quick Start
Spring Cloud入门 - Spring Cloud保护机制