Удалить исходный файл из корзины s3: s3-inbound-streaming-channel-adapter - PullRequest
0 голосов
/ 07 ноября 2018

Исходные файлы не удаляются из корзины s3 один раз после успешной передачи их в целевой каталог. шаги 1. Использование адаптера входящего потокового канала для потоковой передачи исходных файлов из S3 в локальный каталог. (работает нормально) Шаг 2: Хотите удалить исходные файлы после успешной передачи (не работает) код конфигурации ниже

                        <int-aws:s3-inbound-streaming-channel-adapter id="s3FilesInbound"
                                        channel="s3FilesChannel" 
                                        session-factory="s3SessionFactory" 
                                        filename-regex="^.*\\.(txt|csv)$" 
                                        remote-directory-expression="bucket_name" 
                                        auto-startup="true" >

                                <integration:poller id="s3FilesChannelPoller"
                                                    fixed-delay="1000"
                                                    max-messages-per-poll="1">
                                </integration:poller>
                            </int-aws:s3-inbound-streaming-channel-adapter>


                    <integration:stream-transformer id="streamTransformer" input-channel="s3FilesChannel" output-channel="s3FilesChannelOut"/>

        <integration:chain id="filesS3ChannelChain"
                input-channel="s3FilesChannelOut">
                <file:outbound-gateway
                    id="fileInS3ArchiveChannel"
                    directory="local_directory"
                    filename-generator-expression="headers.file_remoteFile">
                    <file:request-handler-advice-chain>
                        <ref bean="retryAdvice" />
                    </file:request-handler-advice-chain>
                </file:outbound-gateway>
                <integration:gateway request-channel="nullChannel"
                        error-channel="errorChannel" />
            </integration:chain>

С уважением,

1 Ответ

0 голосов
/ 07 ноября 2018

Поскольку вы используете там <integration:stream-transformer>, я не вижу причин полагаться на <int-aws:s3-inbound-streaming-channel-adapter>. С первым вы просто устраняете цель потокового воспроизведения последнего.

Я бы посоветовал вам взглянуть на обычный <int-aws:s3-inbound-channel-adapter>, в котором уже есть опция delete-remote-files="true".

С другой стороны, вы все еще можете делать это с тем, что у вас есть, но вам нужно что-то вроде <integration:outbound-channel-adapter expression="@s3SessionFactory.getSession().remove(headers[file_remoteDirectory] + '/' + headers[file_remoteFile])">.

Эти заголовки заполнены AbstractRemoteFileStreamingMessageSource.

...