Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApacheCamel根据S3事件通知传输S3文件_Java_Amazon S3_Apache Camel_Amazon Sqs - Fatal编程技术网

Java 使用ApacheCamel根据S3事件通知传输S3文件

Java 使用ApacheCamel根据S3事件通知传输S3文件,java,amazon-s3,apache-camel,amazon-sqs,Java,Amazon S3,Apache Camel,Amazon Sqs,我有一个应用程序(在EC2实例上运行),它解析到达S3存储桶的新日志文件。我在这个bucket上设置了S3通知,以便在put请求时将消息放入SQS队列。目的是将新到达的日志文件从S3传输到EC2实例 我认为apachecamel将是解决这个问题的理想人选。我对该解决方案有以下问题/意见,并非常希望得到一些反馈: 我们可以使用驼峰路由从SQS读取消息,然后从JSON消息中提取对象键。是否可以在另一个将此对象从S3复制到本地FS的驼峰路由(使用S3组件)中使用此对象键?从外观上看,camels3组件

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

我认为apachecamel将是解决这个问题的理想人选。我对该解决方案有以下问题/意见,并非常希望得到一些反馈:

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

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

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


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

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

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