Groovy 在mule中以轮询为基础使用文件名过滤器从SFTP读取文件

Groovy 在mule中以轮询为基础使用文件名过滤器从SFTP读取文件,groovy,mule,sftp,polling,Groovy,Mule,Sftp,Polling,我使用带有文件名过滤器的groovy脚本,使用下面的代码在轮询的基础上从SFTP位置读取文件 <poll doc:name="Poll"> <schedulers:cron-scheduler expression="${payment.schedule}"/> <scripting:transformer doc:name="Groovy"> <scripting:scr

我使用带有文件名过滤器的groovy脚本,使用下面的代码在轮询的基础上从SFTP位置读取文件

 <poll doc:name="Poll">
            <schedulers:cron-scheduler expression="${payment.schedule}"/>
            <scripting:transformer doc:name="Groovy">
                <scripting:script engine="Groovy">
                    <scripting:text><![CDATA[    
            def endpointBuilder = muleContext.endpointFactory.getEndpointBuilder( 
                    "sftp://${sftp.user}:${sftp.password}@${sftp.host}:${sftp.port}/${sftp.root.path}") 
                    endpointBuilder.addMessageProcessor(new org.mule.routing.MessageFilter(new org.mule.transport.file.filters.FilenameWildcardFilter('payment_*'))) 
                    def inboundEndpoint = endpointBuilder.buildInboundEndpoint() 
                    inboundEndpoint.request(3000L) ;
                    ]]></scripting:text>
                </scripting:script>
            </scripting:transformer>
</poll> 

我在这里面临的问题是,它在每个投票时间表上只读取一个文件。 然而,我的期望是,它应该在每个轮询计划中从SFTP位置读取满足筛选条件的所有文件

我怎样才能做到这一点?
谢谢。

您可能希望将SFTP入站端点与
file:filename通配符过滤器一起使用,而不是依赖封装在轮询中的Groovy脚本。例如:

<sftp:inbound-endpoint host="${sftp.host}" port="${sftp.port}" path="/home/test/sftp-files" user="${sftp.user}" password="${sftp.password}"> 
    <file:filename-wildcard-filter pattern="payment_*"/> 
</sftp:inbound-endpoint>


为什么不直接使用SFTP轮询器?因为它不支持筛选具有特定文件名的文件。这可以使用groovy脚本实现。是的,它可以;)我将发布一个示例,它会在一个轮询计划中开始处理所有文件吗?是的,它会根据您的模式一次轮询所有文件。你自己试试看;)谢谢你,皮埃尔。我不知道SFTP连接器中的文件名通配符过滤器。很好,底层类可能与您在Groovy脚本中定义的类相同,但它是XML内置的,并有官方文档记录。如果这有助于您解决问题,请随意投票和/或接受;)