You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQS监听器@Headers获取到消息体内容而非消息属性

解决Spring Cloud SQS @Headers无法获取自定义消息属性的问题

我之前也踩过这个坑!Spring Cloud SQS对消息属性的绑定逻辑和我们直觉里的不太一样,你碰到的问题大概率是参数绑定的方式不对,试试下面的方案:

1. 正确获取所有自定义消息属性

Spring Cloud SQS会把你在AWS控制台设置的自定义消息属性统一放到aws_custom_headers这个特殊头里,所以你需要通过@Header("aws_custom_headers")来绑定到Map,而不是直接用@Headers:

@SqsListener("your-target-queue")
public void handleMessage(String messageBody,
                          @Header("aws_custom_headers") Map<String, String> customAttributes) {
    // 这里就能拿到你设置的Key1=Value1了
    String value1 = customAttributes.get("Key1");
    System.out.println("自定义属性Key1的值:" + value1);
}

2. 直接获取单个自定义属性

如果只需要某个特定的属性,不用拿整个Map,直接用@Header指定属性名更简洁:

@SqsListener("your-target-queue")
public void handleMessage(String messageBody,
                          @Header("Key1") String key1Value) {
    System.out.println("Key1的值:" + key1Value);
}

3. 排查你之前的问题原因

你说@Headers拿到的是消息体内容,很大可能是因为你把@Headers注解直接绑定到了方法的唯一参数上,框架默认把消息体解析成了这个Map。比如错误的写法:

// 错误示例:这样会把消息体当成headers返回
@SqsListener("your-target-queue")
public void handleMessage(@Headers Map<String, Object> headers) {
    // 这里的headers其实是消息体的解析结果
}

正确的做法是分开声明消息体和头参数,让框架能正确区分两者。

另外建议检查下你的Spring Cloud SQS版本,尽量使用稳定的新版本,避免旧版本的解析bug。

内容的提问来源于stack exchange,提问作者Pankaj Chouhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:23:33