Мы реализуем поток, в котором <int-sftp:inbound-streaming-channel-adapter/>
проверяет каталог для файла и обнаруживает, что он передает поток активатору службы.Весенняя интеграция с примером RedisLockRegistry
Проблема заключается в том, что у нас будет несколько экземпляров приложения, и мы хотели бы заблокировать этот процесс, чтобы только один экземпляр мог забрать файл.
Просмотрев документацию, Redis Lock Registry выглядит как решение, есть ли пример использования этого приложения в xml?
Все, что я могу найти, это несколько ссылок на него и его исходный код.
http://docs.spring.io/spring-integration/reference/html/redis.html точка 24,1
Добавлена информация: Ive добавил RedisMetaDataStore и SftpSimplePatternFileListFilter. Он работает, но у него есть одна странность, когда sftpInboundAdapter активируется poller, он добавляет запись для каждого файла в метаданных. Скажем, что есть 10 файлов, в хранилище данных будет 10 записей, но он не обрабатывает все 10 файлов в «1 go», обрабатывается только 1 файл за опрос от адаптера, что было бы неплохо, но в нескольких экземплярах если сервер, который взял файлы, упал после обработки 5 файлов, другой сервер, похоже, не забирает оставшиеся 5 файлов, если файлы не «тронуты».
Правильно ли выполняется выбор одного файла за опрос или он должен обрабатывать все действительные файлы в течение одного опроса.
Ниже мой 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>
Спасибо Гэри, Ive реализовано, как вы предложили, и я думаю, что его почти там, я добавил дополнительную информацию к исходному вопросу, объясняющему проблему. – sdiaz1000
См. Изменение в моем ответе для получения дополнительной информации. –
Ive просто сработал, я добавил атрибут max-messages-per-poll для poller и установил его в 10, отлично работает. Благодарю. – sdiaz1000