繁体   English   中英

使用Apache Camel基于S3事件通知传输S3文件

Using Apache Camel to transfer S3 files based on S3 event notifications

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

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

1 个回复

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

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

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

5 如何获得一个s3文件创建事件

我有几个亚马逊s3存储桶,不同的客户端通常使用sftp将文件上传到这些存储桶。 由于不同的客户端以不同的方式访问存储桶,因此我无法确切预期它们将如何上传文件。 我想在有新文件到达时得到通知,所以当触发任何s3对象创建时,我都会将存储桶写入SNS主题。 但是,对于某些客户端,每次创建文件都会 ...

7 文件流到使用 lambda 的 s3 文件上传

我正在使用 box api 在 AWS 上工作。 我想使用 lambda 函数将文件上传到 s3 存储桶。 但给出错误 我正在使用这个 api https://developer.box.com/en/reference/get-files-id-content/来获取文件的内容并上传到 s3 存储 ...

8 如何更改S3文件?

我有一个900 MB的文件,我想从S3下载到磁盘,如果它还没有下载到位。 有没有一种简单的方法让我只下载文件(如果它还没有到位)? 我知道S3支持查询文件的MD5校验和,但我希望不必自己构建这个逻辑。 ...

9 S3 文件后处理

我有一个协议设置,它将录制的音频作为 .webm 文件发送到 S3 存储桶。 我希望这些文件中的每一个在遇到存储桶时都被立即处理。 我怎样才能做到这一点? 后处理有两个步骤,1) 将文件从 .webm 转换为 .wav,2) 运行分析音频的程序。 在我的电脑上,在终端中,我会这样做: 第1步 ...

10 S3文件没有可读长度

我试图从我的一个存储桶中访问给定文件,例如 但第三行记录为0(可读长度) 有关更多背景信息,我尝试使用此流通过fluent-ffmpeg运行FFMpeg。 当前,当我将该流传递给命令时,将不处理任何数据,并且执行立即结束。 为什么s3不发回任何数据? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM