【发布时间】:2018-08-07 17:19:18
【问题描述】:
我正在使用 Spring Cloud SQS 消息传递来监听指定的队列。因此使用@SqsListener 注释如下:
@SqsListener(value = "${QUEUE}", deletionPolicy = SqsMessageDeletionPolicy.ALWAYS )
public void receive(@Headers Map<String, String> header, @Payload String message) {
try {
logger.logInfo("Message payload is: "+message);
logger.logInfo("Header from SQS is: "+header);
if(<Some condition>){
//Dequeue the message once message is processed successfully
awsSQSAsync.deleteMessage(header.get(LOOKUP_DESTINATION), header.get(RECEIPT_HANDLE));
}else{
logger.logInfo("Message with header: " + header + " FAILED to process");
logger.logError(FLEX_TH_SQS001);
}
} catch (Exception e) {
logger.logError(FLEX_TH_SQS001, e);
}
}
我能够成功连接指定队列并阅读消息。在发送消息之前,我将消息属性设置为“Key1”=“Value1”以及 aws 控制台中的消息。以下是邮件正文:
{
"service": "ecsservice"
}
我期望“标头”接收所有消息属性的映射以及一个映射,即 Key1 和 Value1。但我收到的是: {service=ecsservice} 作为填充地图。
这意味着消息的负载/正文将作为标头的一部分出现,尽管正文是正确的。
我想知道由于 @Header 标头没有获得正确的消息属性而导致我犯了什么错误。
寻求专家意见。
-PC
【问题讨论】:
标签: spring-boot spring-cloud amazon-sqs