У меня есть требование загрузить файл с S3 на основе содержимого сообщения. Другими словами, файл для загрузки ранее неизвестен, я должен искать и находить его во время выполнения. S3StreamingMessageSource не подходит, потому что:
- Это зависит от опроса, где мне нужно дождаться сообщения.
- Я не могу найти способ динамически создать
S3StreamingMessageSource
в середине потока.gateway(IntegrationFlow)
выглядит интересно, но мне нужен несуществующийgateway(Function<Message<?>, IntegrationFlow>)
.
Другой кандидат: S3MessageHandler, но он не поддерживает перечисление файлов, которые мне нужны для поиска нужного файла.
Я могу реализовать свой собственный обработчик сообщений напрямую с помощью AWS API, просто интересно, не упустил ли я что-то, потому что это не кажется необычным требованием. В конце концов, не каждое приложение просто сидит там и продолжает опрашивать S3 на наличие новых файлов.
InputStream
вы все еще можете использоватьS3RemoteFileTemplate
и его функциюget()
илиS3Session.readRaw()
, если вам обязательно нужно вернуть поток. Да, мы можем добавить поддержкуInputStream
вS3MessageHandler
, но это не ошибка. - person Artem Bilan   schedule 30.12.2017get
, но он вызываетcallback.doWithInputStream
, а затем закрывает поток. В отличие отS3StreamingMessageSource
, сообщение не может быть передано вниз по течению, все, что должно быть сделано, должно быть сделано в обратном вызове. Я иду по пути внедрения интеллектуального фильтра, который я могу использовать сS3StreamingMessageSource
, чтобы мне не пришлось изобретать велосипед. - person Abhijit Sarkar   schedule 30.12.2017receive()
вручную.readRaw()
из сеанса должно быть хорошо для вас. - person Artem Bilan   schedule 30.12.2017