- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个应用程序(在 EC2 实例上运行)解析到达 S3 存储桶的新日志文件。我已经在此存储桶上设置了 S3 通知,以根据 PUT 请求将消息放入 SQS 队列。目的是将新到达的日志文件从 S3 传输到 EC2 实例。
我认为 Apache Camel 是解决这个问题的理想人选。我对解决方案有以下问题/观察,非常感谢对此的一些反馈:
我们可以使用 Camel 路由从 SQS 读取消息,然后从 JSON 消息中提取对象键。是否可以在将此对象从 S3 复制到本地 FS 的另一个 Camel 路由(使用 S3 组件)中使用此对象键?从外观上看,Camel S3 组件似乎只能处理桶中的新对象,因为它只在 URI 中使用桶名称。因此,可能无法从 S3 存储桶复制特定 key 。此外,我不确定是否可以在 Camel 中使用动态 URI,因为每次对象名称都会不同。
如果 Camel S3 组件确实能够处理到达 S3 桶中的新对象,那么我们完全不需要 S3 通知。但这有一个问题(因为它是无状态的),如果由于某种原因这个应用程序出现故障,那么它将错过在停机期间到达的对象。
另一种可能性是使用 Camel 从 SQS 读取消息,处理这些消息并使用普通 Java 类从 S3 复制对象。但是这种并没有充分发挥Apache Camel的优势。
最佳答案
有一个 SNS 来分离文件处理和文件传输是件好事。但你真的需要这个吗?它会增加你的应用程序的复杂性。如果您只是想将传入的文件无遗漏地处理到 S3 存储桶,最简单的方法是创建一个存储桶说“传入”,另一个调用“已处理”。每次您的应用程序都可以扫描传入的存储桶并对其进行处理,完成后将文件放入已处理的存储桶中。
您需要注意的一件事是标记正在处理的文件以避免冲突。你可以给它加上特殊的后缀。
AWS 还提供第三种方式来执行“事件通知”调用“Lambda 函数”。你也可以看看那个。它可以启用一些简单的处理程序,不需要自己编写额外的应用程序。
关于java - 使用 Apache Camel 根据 S3 事件通知传输 S3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951067/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!