【发布时间】:2018-06-09 13:14:17
【问题描述】:
我需要根据消息内容从 S3 下载文件。换句话说,要下载的文件以前是未知的,我必须在运行时搜索并找到它。 S3StreamingMessageSource 似乎不太合适,因为:
- 它依赖于轮询,因为我需要等待消息。
- 我找不到在流中间动态创建
S3StreamingMessageSource的任何方法。gateway(IntegrationFlow)看起来很有趣,但我需要的是一个不存在的gateway(Function<Message<?>, IntegrationFlow>)。
另一个候选人是S3MessageHandler,但它不支持列出我需要查找所需文件的文件。
我可以直接使用 AWS API 实现我自己的消息处理程序,只是想知道我是否遗漏了什么,因为这似乎不是一个不寻常的要求。毕竟,并不是每个应用程序都只是坐在那里并不断轮询 S3 以获取新文件。
【问题讨论】:
-
好吧,对于
InputStream,您仍然可以使用S3RemoteFileTemplate及其get()函数或S3Session.readRaw(),如果您确实需要返回流。是的,我们可能会考虑将InputStream支持添加到S3MessageHandler,但这不是错误 -
@ArtemBilan 我查看了
get,但它调用了callback.doWithInputStream,然后关闭了流。与S3StreamingMessageSource不同,消息没有机会向下游传输,任何需要做的事情都需要在回调中完成。我正在实现一个可以与S3StreamingMessageSource一起使用的智能过滤器,这样我就不必重新发明轮子了。 -
好的。我知道了。虽然这不是事件驱动的,但它仍然是可轮询的,但是您确实可以手动调用
receive()。来自会话的readRaw()应该对你有好处。
标签: spring amazon-s3 spring-integration enterprise-integration spring-integration-aws