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

如何在Apache Camel YAML DSL中结合多Header定义幂等消费者

解决方案

在Camel 3.19的YAML DSL中,要实现和Java DSL里header("CamelAwsS3Key").append(header("CamelAwsS3LastModified"))等效的幂等键逻辑,你需要将idempotent-consumer中的header配置替换为expression节点,使用Simple语言拼接两个Header的值。

修改后的完整路由配置如下:

- beans:
    - name: IdempotentRepositoryBean
      type: org.apache.camel.support.processor.idempotent.MemoryIdempotentRepository

- route:
    from:
      uri: "aws2-s3:arn:aws:s3:someBucket"
      parameters:
        # The AWS region hosting the bucket and the access credentials
        # are obtained from Properties file.
        amazonS3Client: "#awss3SourceClient"
        deleteAfterRead: "false"
      steps:
        - idempotent-consumer:
            idempotent-repository: "IdempotentRepositoryBean"
            # 替换原header配置,用Simple表达式组合两个Header
            expression:
              simple: "${header.CamelAwsS3Key}${header.CamelAwsS3LastModified}"
            skip-duplicate: true
        - set-header:
            name: "CamelFileName"
            simple: "${header.CamelAwsS3Key}"
        - to:
            uri: "file:C:/..."

说明

Java DSL中的append()方法本质是将两个Header的字符串值直接拼接,作为幂等判断的唯一键。上面的Simple表达式${header.CamelAwsS3Key}${header.CamelAwsS3LastModified}和Java代码的行为完全一致——当S3文件的Key不变但最后修改时间更新时,拼接后的幂等键会变化,路由就不会将其判定为重复文件,从而重新处理更新后的文件。

如果担心Key本身的字符和时间戳混淆,也可以给两个值加分隔符,比如:

${header.CamelAwsS3Key}-${header.CamelAwsS3LastModified}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:43:14