首页 文章

Apache Camel - 基于body聚合消息

提问于
浏览
0

我目前正在使用apache camel来使用SQS消息,一切都运行正常 .

作为一个项目的一部分,我在上传文件时使用S3通知事件 . 文件上传到可预测的S3密钥 - (<type>/<account-id>/<id>/<file>) .

在处理时,我使用camel将消息聚合到一个交换中(等待10条消息,或者在1秒后超时) . 我想知道但是,是否有一种基于S3聚合的方法 - 例如,具有相同类型或id的聚合消息 .

根据我从阅读骆驼文档中的理解,有一些方法可以查询Json有效负载或标头值 - 这是一种可能的方法(因为S3事件通知是一个Json消息,并且根据AWS文档,PUT操作只会生成一个单记录入口)?或者我需要实现自己的聚合器?

要添加一些上下文 - 我有一个收集数据的服务,并将数据上传到S3 . 然后,另一项服务将在收到通知后下载此数据,处理并上传到另一个存储桶 . 如果我可以聚合S3通知,我可以组合数据并上传它,减少上传量和API调用等 .

2 回答

  • 0

    如果您使用camel-aws s3组件,则可以从Message的 CamelAwsS3Key 标头访问/获取S3密钥,您无需查询正文,但需要从S3密钥中提取所需的字段 .

  • 1

    虽然不是最好的或最通用的解决方案,但我确实找到了一种方法来实现这一点 -

    我只是添加了一个在传递给聚合器之前被调用的额外处理器 . 处理器只检查事件记录(因为我正在侦听来自S3的PUT事件,根据AWS文档,应该只有一条记录)用于S3密钥并在消息上设置标头 .

    然后,聚合器可以根据这些标头组合Exchange(只需S3-Type,S3-Account-Id和S3-Id) .

相关问题