0

ファイル A と B をリモート フォルダに順番にコピーする必要があります。A が送信された後にのみ B が送信されることが重要です。ドキュメントを読みましたが、明確ではありません。私の考えは、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>

提案はありますか?

4

1 に答える 1

1

チャネルからを削除する<queue/>と、呼び出し元のスレッドで順番に実行されます。

キュー チャネルを使用する場合。ポーラーが必要ですが、ポーラーに がない限りtask-executor、メッセージはポーラー スレッドで順番に送信されます。次のポーリングは、現在のポーリングが完了するまで行われません。

于 2016-12-05T14:48:08.447 に答える