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

升级Camel AWS至AWS2 SQS后日志出现Header转MessageAttribute警告的问询

问题描述

从camel-aws升级到camel-aws2后,业务功能正常,但日志持续出现如下警告:

WARN 23652 --- [Camel (camel-1) thread #11 - seda://to-image-queue] o.a.c.component.aws2.sqs.Sqs2Producer : Cannot put the message header key=FileFromFtp, value=/tmp/Y25032_20251126T090838Z7663778454258315714.jpg into Sqs MessageAttribute

此前使用camel-aws无此问题,怀疑camel-aws2会自动将所有消息Header转为SQS的MessageAttribute,想知道:

  1. 若判断正确,如何阻止该行为?
  2. 若判断错误,为何现在会尝试添加此前未处理的Header?

相关路由定义:

from(SEDA_TO_IMAGE_QUEUE)
    .routeId("send-image-to-processing-queue")
    .log(LoggingLevel.DEBUG, "sending image metadata for camera \${header.$HEADER_CAMERA} to queue")
    .process().message { this.createPayload(it) }
    .marshal(jacksonDataFormat)
    .to("aws2-sqs://{{sqs.queue}}?amazonSQSClient=#sqs-client")
    .log(LoggingLevel.DEBUG, "sent image \${header." + AWS2S3Constants.KEY + "} to queue")
问题分析与解决方案

你的判断正确:camel-aws2的SQS组件默认会将Camel消息的所有Header自动映射为SQS的MessageAttribute,而旧版camel-aws无此默认行为,这就是升级后出现警告的原因。

SQS的MessageAttribute有严格限制:

  • 键名长度不能超过256字符
  • 值类型仅支持String、Number或Binary,且对应数据有大小限制
  • 单个消息的所有MessageAttribute总大小不能超过262144字节

FileFromFtp Header触发警告,大概率是组件默认映射逻辑下,该Header的类型或处理方式不符合SQS的要求。

要阻止自动映射Header到MessageAttribute,有以下几种方法:

方法1:完全禁用Header映射

在aws2-sqs的端点URL中添加transferExchange=false参数,彻底关闭Camel消息Header到SQS MessageAttribute的自动映射:

.to("aws2-sqs://{{sqs.queue}}?amazonSQSClient=#sqs-client&transferExchange=false")

方法2:仅映射指定Header

如果需要保留部分Header作为MessageAttribute,可通过messageAttributeNames参数指定要映射的Header列表,未指定的Header不会被组件尝试转换:

// 示例:仅映射$HEADER_CAMERA这个Header
.to("aws2-sqs://{{sqs.queue}}?amazonSQSClient=#sqs-client&messageAttributeNames=$HEADER_CAMERA")

方法3:显式移除不需要的Header

在路由中直接移除不需要的Header,避免组件尝试处理它们:

from(SEDA_TO_IMAGE_QUEUE)
    .routeId("send-image-to-processing-queue")
    .log(LoggingLevel.DEBUG, "sending image metadata for camera \${header.$HEADER_CAMERA} to queue")
    .process().message { this.createPayload(it) }
    .marshal(jacksonDataFormat)
    .removeHeader("FileFromFtp") // 移除触发警告的Header
    .to("aws2-sqs://{{sqs.queue}}?amazonSQSClient=#sqs-client")
    .log(LoggingLevel.DEBUG, "sent image \${header." + AWS2S3Constants.KEY + "} to queue")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 23:43:12