首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-与AWS S3重试集成失败的"get“文件

spring-与AWS S3重试集成失败的"get“文件
EN

Stack Overflow用户
提问于 2018-09-24 12:39:47
回答 1查看 193关注 0票数 0

我们正在使用与S3的spring集成。我们有从S3读取的S3入站流通道适配器。正在发生的情况是,如果"get“失败,S3入站流通道适配器将文件名放在"acceptOnceFilter”中,而不会在失败时重试。

Q1。我们想要的是当S3入站流通道适配器“从S3获得”一个文件,并说由于某种原因这个"get“失败.我们如何让S3入站流通道适配器重新尝试这个" get“请求对同一个文件?

Q2。失败时,从S3入站流通道适配器将异常发送到默认的"errorChannel“。异常中的消息是否包含失败的“文件名”?

代码语言:javascript
复制
<int:channel id="s3FileProcessingChannel">
  <int:queue capacity="15"/>
</int:channel>

<bean id="metadataStore" class="org.springframework.integration.metadata.SimpleMetadataStore"/>

<bean id="acceptOnceFilter"
  class="org.springframework.integration.aws.support.filters.S3PersistentAcceptOnceFileListFilter">
  <constructor-arg index="0" ref="metadataStore"/>
  <constructor-arg index="1" value="streaming"/>
</bean>

<int-aws:s3-inbound-streaming-channel-adapter id="s3Region1"
channel="s3FileProcessingChannel" 
session-factory="s3SessionFactory"
filter="acceptOnceFilter"
remotedirectoryexpression="'${s3.sourceBucket}/emm'">

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

谢谢GM

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 16:08:39

S3PersistentAcceptOnceFileListFilter实现:

代码语言:javascript
复制
/**
 * A {@link FileListFilter} that can be reset by removing a specific file from its
 * state.
 * @author Gary Russell
 * @since 4.1.7
 *
 */
public interface ResettableFileListFilter<F> extends FileListFilter<F> {

    /**
     * Remove the specified file from the filter so it will pass on the next attempt.
     * @param f the element to remove.
     * @return true if the file was removed as a result of this call.
     */
    boolean remove(F f);

}

S3StreamingMessageSource填充如下所示的标题:

代码语言:javascript
复制
return getMessageBuilderFactory()
                    .withPayload(session.readRaw(remotePath))
                    .setHeader(IntegrationMessageHeaderAccessor.CLOSEABLE_RESOURCE, session)
                    .setHeader(FileHeaders.REMOTE_DIRECTORY, file.getRemoteDirectory())
                    .setHeader(FileHeaders.REMOTE_FILE, file.getFilename())
                    .setHeader(FileHeaders.REMOTE_FILE_INFO,
                            this.fileInfoJson ? file.toJson() : file);

当错误发生时,您只需使用该FileHeaders.REMOTE_FILE调用上面提到的remove(),您的失败文件将在下一个轮询周期从S3中获取。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52479637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档