如何通过 SFTP 顺序复制文件(Spring 集成)?
How to copy files by SFTP sequentially (Spring integration)?
我必须依次将文件 A 和 B 复制到远程文件夹。重要的是 B 仅在 A 发送之后发送,至少同时发送,但不能在之前发送。
我已经阅读了文档,但尚不清楚。我的想法是将 2 条消息放入同一个频道。但是我不知道链接到这2条消息的文件是否会按顺序发送。
@Component
public class JobExportExecutionsRouter {
...
@Autowired
private MessageChannel sftpIncrExportChannel;
...
@Router
public List<String> routeJobExecution(JobExecution jobExecution) {
final List<String> routeToChannels = new ArrayList<String>();
...
sftpIncrExportChannel.send(MessageBuilder.withPayload(fileA).build());
sftpIncrExportChannel.send(MessageBuilder.withPayload(fileB).build());
routeToChannels.add("sftpIncrExportChannel");
return routeToChannels;
}
}
我的 XML 配置包含:
<int:channel id="sftpIncrExportChannel">
<int:queue/>
</int:channel>
...
<int-sftp:outbound-channel-adapter session-factory="sftpSessionFactory" channel="sftpIncrExportChannel" charset="UTF8" remote-directory="${export.incr.sftp.dir}" />
...
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="${export.incr.sftp.dir}"/>
<property name="user" value="${export.incr.sftp.user}"/>
<property name="password" value="${export.incr.sftp.password}"/>
</bean>
你有什么建议吗?
如果您从频道中删除 <queue/>
,它们将 运行 在您的调用线程中按顺序。
如果您使用队列通道;您需要一个轮询器,但是只要轮询器没有 task-executor
,消息就会在轮询器线程上按顺序发送。直到当前投票完成后才会进行下一次投票。
我必须依次将文件 A 和 B 复制到远程文件夹。重要的是 B 仅在 A 发送之后发送,至少同时发送,但不能在之前发送。 我已经阅读了文档,但尚不清楚。我的想法是将 2 条消息放入同一个频道。但是我不知道链接到这2条消息的文件是否会按顺序发送。
@Component
public class JobExportExecutionsRouter {
...
@Autowired
private MessageChannel sftpIncrExportChannel;
...
@Router
public List<String> routeJobExecution(JobExecution jobExecution) {
final List<String> routeToChannels = new ArrayList<String>();
...
sftpIncrExportChannel.send(MessageBuilder.withPayload(fileA).build());
sftpIncrExportChannel.send(MessageBuilder.withPayload(fileB).build());
routeToChannels.add("sftpIncrExportChannel");
return routeToChannels;
}
}
我的 XML 配置包含:
<int:channel id="sftpIncrExportChannel">
<int:queue/>
</int:channel>
...
<int-sftp:outbound-channel-adapter session-factory="sftpSessionFactory" channel="sftpIncrExportChannel" charset="UTF8" remote-directory="${export.incr.sftp.dir}" />
...
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="${export.incr.sftp.dir}"/>
<property name="user" value="${export.incr.sftp.user}"/>
<property name="password" value="${export.incr.sftp.password}"/>
</bean>
你有什么建议吗?
如果您从频道中删除 <queue/>
,它们将 运行 在您的调用线程中按顺序。
如果您使用队列通道;您需要一个轮询器,但是只要轮询器没有 task-executor
,消息就会在轮询器线程上按顺序发送。直到当前投票完成后才会进行下一次投票。