从版本 5.0.7 开始,可以使用;当配置为 Poller Advice 时,入站适配器可以轮询多个服务器和目录。
配置建议并将其正常添加到 Poller 的建议链中。
A 用于选择服务器,有关更多信息,请参阅 Delegating Session Factory。
通知配置由对象列表组成。RotatingServerAdvice
DelegatingSessionFactory
RotationPolicy.KeyDirectory
例
@Bean
public RotatingServerAdvice advice() {
List<RotationPolicy.KeyDirectory> keyDirectories = new ArrayList<>();
keyDirectories.add(new RotationPolicy.KeyDirectory("one", "foo"));
keyDirectories.add(new RotationPolicy.KeyDirectory("one", "bar"));
keyDirectories.add(new RotationPolicy.KeyDirectory("two", "baz"));
keyDirectories.add(new RotationPolicy.KeyDirectory("two", "qux"));
keyDirectories.add(new RotationPolicy.KeyDirectory("three", "fiz"));
keyDirectories.add(new RotationPolicy.KeyDirectory("three", "buz"));
return new RotatingServerAdvice(delegatingSf(), keyDirectories);
}
此建议将轮询服务器上的目录,直到没有新文件存在,然后移动到 directory ,然后移动到 server 上的 directory ,依此类推。foo
one
bar
baz
two
可以使用构造函数 arg 修改此默认行为:fair
公平
@Bean
public RotatingServerAdvice advice() {
...
return new RotatingServerAdvice(delegatingSf(), keyDirectories, true);
}
在这种情况下,无论上一个 poll 是否返回文件,通知都将移动到下一个服务器/目录。
或者,您也可以提供自己的信息以根据需要重新配置消息源:RotationPolicy
政策
public interface RotationPolicy {
void beforeReceive(MessageSource<?> source);
void afterReceive(boolean messageReceived, MessageSource<?> source);
}
和
习惯
@Bean
public RotatingServerAdvice advice() {
return new RotatingServerAdvice(myRotationPolicy());
}
属性 ( 在 synchronizer 上) 现在可以包含变量。
这允许将从不同目录中检索到的文件下载到本地的类似目录:local-filename-generator-expression
localFilenameGeneratorExpression
#remoteDirectory
@Bean
public IntegrationFlow flow() {
return IntegrationFlow.from(Ftp.inboundAdapter(sf())
.filter(new FtpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "rotate"))
.localDirectory(new File(tmpDir))
.localFilenameExpression("#remoteDirectory + T(java.io.File).separator + #root")
.remoteDirectory("."),
e -> e.poller(Pollers.fixedDelay(1).advice(advice())))
.channel(MessageChannels.queue("files"))
.get();
}
使用此建议时,不要在 Poller 上配置 a;有关更多信息,请参见Conditional Pollers for Message Sources。TaskExecutor |
使用此建议时,不要在 Poller 上配置 a;有关更多信息,请参见Conditional Pollers for Message Sources。TaskExecutor |