Как настроить несколько шлюзов в Spring Integration? - PullRequest
0 голосов
/ 11 февраля 2019

Обработка нескольких хостов SFTP в Spring Integration

Я хочу настроить несколько хостов SFTP, поэтому на основе пользовательского ввода (передача пользователем hostName) я выберу HOST и выполню операцию чтения.

Проблема в том, что я не хочу создавать несколько файлов Java.вместо этого я хочу ввести информацию о хосте в виде массива в файлах свойств и на основе этого ввода создать конфигурацию 1, 2 или более SessionFactories, шлюзы и т. д.

Ниже приведена конфигурация, которую я использовал для настройки одногоХост .....

@Configuration
public class HostConfiguration {

  @Bean
  public SessionFactory<LsEntry> sftpSessionFactory() {

    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
    factory.setPort(22);
    factory.setHost(host);
    factory.setUser(user);
    factory.setPassword(password);
    factory.setAllowUnknownKeys(true);

    return new CachingSessionFactory<LsEntry>(factory);
  }

  @Bean
  @ServiceActivator(inputChannel = "toSftpReadChannel")
  @Description("Sftp Outbound Gateway for SFTP Read Operation")
  public MessageHandler sftpReadHandler() {

    SftpOutboundGateway sftpReadGateway = new SftpOutboundGatewaysftpSessionFactory(), Command.LS.getCommand(), "payload");
    sftpReadGateway.setAsync(true);
    sftpReadGateway.setOption(Option.NAME_ONLY);
    sftpReadGateway.setOutputChannel(fromSftpReadChannel());

    return sftpReadGateway;
  }

  @Bean(name = PollerMetadata.DEFAULT_POLLER)
  public PollerMetadata poller() {
   return Pollers.fixedRate(500).get();
  }

  @Bean
  @Description("Sftp Read Request Channel")
  public MessageChannel toSftpReadChannel(){
    return new QueueChannel(5);
  }

  @Bean
  @Description("Sftp Read Response Channel")
  public MessageChannel fromSftpReadChannel(){
    return new DirectChannel();
  }

  @MessagingGateway
  public interface SftpGateway {

    @Gateway(requestChannel = "toSftpReadChannel", replyChannel = "fromSftpReadChannel")
    Future<Message> readFromRemoteSftp(Message message);

  }

}

Есть идеи, как этого добиться в Spring-Boot / Spring-Integration !!!!

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете рассмотреть возможность использования DelegatingSessionFactory вместо нескольких конфигураций:

/**
 * {@link SessionFactory} that delegates to a {@link SessionFactory} retrieved from a
 * {@link SessionFactoryLocator}.
 *
 * @author Gary Russell
 * @since 4.2
 *
 */
public class DelegatingSessionFactory<F> implements SessionFactory<F> {

Для получения дополнительной информации см. Документацию: https://docs.spring.io/spring-integration/docs/current/reference/html/ftp.html#ftp-dsf

...