【问题标题】:Using Apache Camel to transfer S3 files based on S3 event notifications使用 Apache Camel 根据 S3 事件通知传输 S3 文件
【发布时间】:2015-03-13 02:47:30
【问题描述】:

我有一个应用程序(在 EC2 实例上运行)解析到达 S3 存储桶的新日志文件。我已经在此存储桶上设置了 S3 通知,以便在 PUT 请求时将消息放入 SQS 队列中。目的是将新到达的日志文件从 S3 传输到 EC2 实例。

我认为 Apache Camel 将是解决此问题的理想人选。我对解决方案有以下问题/意见,非常感谢您对此的一些反馈:

  1. 我们可以使用 Camel 路由从 SQS 读取消息,然后从 JSON 消息中提取对象键。是否可以在另一个将这个对象从 S3 复制到本地 FS 的 Camel 路由(使用 S3 组件)中使用这个对象键?从外观上看,Camel S3 组件似乎只能处理存储桶中的新对象,因为它只需要 URI 中的存储桶名称。因此,可能无法从 S3 存储桶复制特定密钥。另外我不确定是否可以在 Camel 中使用动态 URI,因为对象名称每次都会不同。

  2. 如果 Camel S3 组件确实能够处理到达 S3 存储桶的新对象,那么我们完全不需要 S3 通知。但这有一个问题(因为它是无状态的),如果由于某种原因此应用程序出现故障,那么它将错过停机期间到达的对象。

  3. 另一种可能性是使用 Camel 从 SQS 读取消息,处理这些消息并使用普通 Java 类从 S3 复制对象。但是这种方式并没有充分发挥 Apache Camel 的优势。

【问题讨论】:

    标签: java amazon-s3 apache-camel amazon-sqs


    【解决方案1】:

    有一个 SNS 来解耦文件处理和文件传输是好的。但是你真的需要这个吗?它将增加您的应用程序的复杂性。如果您只想处理传入的文件到 S3 存储桶而不会错过,最简单的方法是创建一个存储桶说“传入”和另一个调用“已处理”。每次您的应用程序都可以扫描传入的存储桶并对其进行处理,完成后将文件放入已处理的存储桶中。

    您需要注意的一件事是标记正在处理的文件以避免冲突。你可以给它加上特殊的后缀。

    AWS 还提供第三种方式来执行“事件通知”调用“Lambda 函数”。你也可以看看那个。它可以启用一些不需要自己编写额外应用程序的简单处理程序。

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 2019-07-17
      • 2021-11-21
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2017-12-13
      • 2018-01-26
      • 2021-10-25
      相关资源
      最近更新 更多