Мы реализуем поток, в котором <int-sftp:inbound-streaming-channel-adapter/>
опрашивает каталог в поисках файла и при обнаружении передает поток активатору службы.
Проблема в том, что у нас будет запущено несколько экземпляров приложения, и мы хотели бы заблокировать процесс, чтобы только один экземпляр мог получить файл.
Глядя на документацию, Redis Lock Registry выглядит как решение, есть ли пример использования этого в xml?
Все, что я могу найти, - это несколько ссылок на него и исходный код для него.
http://docs.spring.io/spring-integration/reference/html/redis.html пункт 24.1
Добавленная информация: Я добавил RedisMetaDataStore и SftpSimplePatternFileListFilter. Он работает, но у него есть одна странность: когда sftpInboundAdapter активируется опросчиком, он добавляет запись для каждого файла в хранилище метаданных. Скажем, есть 10 файлов, в хранилище данных будет 10 записей, но он не обрабатывает все 10 файлов за один раз, только 1 файл обрабатывается за один опрос от адаптера, что было бы хорошо, но в нескольких экземплярах окружающая среда, если сервер, который взял файлы, отключился после обработки 5 файлов, другой сервер, похоже, не заберет оставшиеся 5 файлов, если файлы не будут "затронуты".
Правильно ли выбирается 1 файл за опрос или все допустимые файлы должны обрабатываться за один опрос.
Ниже мой XML
<int:channel id="sftpInbound"/> <!-- To Java -->
<int:channel id="sftpOutbound"/>
<int:channel id="sftpStreamTransformer"/>
<int-sftp:inbound-streaming-channel-adapter id="sftpInboundAdapter"
channel="sftpInbound"
session-factory="sftpSessionFactory"
filter="compositeFilter"
remote-file-separator="/"
remote-directory="${sftp.directory}">
<int:poller cron="${sftp.cron}"/>
</int-sftp:inbound-streaming-channel-adapter>
<int:stream-transformer input-channel="sftpStreamTransformer" output-channel="sftpOutbound"/>
<bean id="compositeFilter"
class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<bean
class="org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter">
<constructor-arg value="Receipt*.txt" />
</bean>
<bean id="SftpPersistentAcceptOnceFileListFilter" class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
<constructor-arg ref="metadataStore" />
<constructor-arg value="ReceiptLock_" />
</bean>
</list>
</constructor-arg>
</bean>
<bean id="redisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.password}" />
<property name="hostName" value="${redis.host}" />
</bean>