当前位置: 首页 > 知识库问答 >
问题:

Spring Integration出站文件适配器

安明亮
2023-03-14

我在实现某些功能时遇到了一些问题,当我删除文件时,我注意到了一些不一致。

1)当我删除多个文件时,有时并不是所有文件都被转移到正确的目录。

<!-- Adapter for reading files in the incoming directory -->
<int-file:inbound-channel-adapter id="incomingFileAdapter"
                                  channel="fileInputChannel"
                                  prevent-duplicates="false"
                                  scanner="recursiveDirectoryScanner"
                                  filename-regex="^.*\.(?i)(avi|divx|xvid|flv|f4v|mkv|m1v|m2v|m4v|mpeg|mpg|mp4|mov|vob|wmv|asf|ts|mxf)$"
                                  directory="${file.listener.path.incoming}">
    <int:poller id="filePoller" default="true" max-messages-per-poll="5" fixed-rate="5000">
        <int:transactional transaction-manager="pseudoTransactionManager" />
    </int:poller>
</int-file:inbound-channel-adapter>

<!-- Adapter for writing files to the processed directory -->
<int-file:outbound-channel-adapter id="processedFileAdapter"
                                   mode="REPLACE"
                                   channel="fileInputChannel"
                                   delete-source-files="true"
                                   auto-create-directory="true"
                                   order="1"
                                   directory-expression="@dynamicDirectoryGenerator.generateDirectory(payload)" />

<int:service-activator
        input-channel="fileInputChannel"
        output-channel="nullChannel"
        order="2"
        ref="fileInputActivator"
        method="processMessage"/>

<bean id="fileInputActivator" class="com.nfl.dm.shield.ingestion.file.activator.FileInputActivator" />
<bean id="recursiveDirectoryScanner" class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" />
<bean id="dynamicDirectoryGenerator" class="com.nfl.dm.shield.ingestion.file.dynamic.DynamicDirectoryGenerator" />
<bean id="pseudoTransactionManager" class="org.springframework.integration.transaction.PseudoTransactionManager" />

共有1个答案

史高阳
2023-03-14

a)由于没有FileInputChannel的声明,因此它是DirectChanel,这意味着消息将交替地转到出站适配器和服务激活器。

将其声明为 ,每个文件将转到两个订阅服务器(基于顺序)。

b)不清楚您的意思,既然您想要将文件发送到服务,为什么要在它到达之前删除它?如果您确实想要这样做,那么您可以使用ExpressionEvaluatingRequestHandlerAdvise将 添加到文件适配器。有关如何使用该建议的示例,请参见重试和更多示例。

c)不,伪事务不是必需的,因为您没有对成功或失败采取任何行动。

 类似资料:
  • 我是这个Spring集成和JMS的新手,我开始使用它。在这里,我想通过activemq创建普通的jms消息,并通过spring inbound适配器(消息驱动)接收它。 以下是我的spring配置文件 这是我的测试课。 } 但问题是我不能保证交货。有些时候程序不能接收消息,有些时候它成功了,但有一些警告,如 无法刷新目标“queue://MSG_QUEUE”的JMS连接,将在5000毫秒后重试,原

  • 问题内容: Spring Integration FTP中的入站通道适配器和出站通道适配器之间有什么区别?我应该使用哪一个?何时使用? 我从文档中了解到,出站可以发送任何类型的文件(例如byte [],String,java.io.File),但入站仅限于文件类型。那仅仅是区别还是其他? 问题答案: 我建议您首先阅读理论 。 任何Inbound适配器都旨在从外部系统获取数据。Outbound-放置

  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更

  • 我有一个模型对象,它是在多次转换和解析之后填充的。现在,我需要使用spring集成将模型中的消息属性发送给kafka。我可以使用messageKey方法构造键,但如何从m.getPayload()之类的模型中获取实际消息。getMessage()并将其发送给Kafka。