<int-sftp:inbound-streaming-channel-adapter/>
은 파일에 대한 디렉토리를 폴링하고 발견되면 스트림을 서비스 활성기로 전달하는 플로우를 구현합니다.RedisLockRegistry와의 Spring 통합 예제
문제는 앱이 여러 개 실행되고있어 하나의 인스턴스 만 파일을 선택할 수 있도록 프로세스를 잠그고 싶습니다.
설명서를 보면 Redis Lock 레지스트리가 해결책으로 보이며 xml에 사용 된 예가 있습니까?
필자가 찾을 수있는 것은 소스 코드와 소스 코드입니다.
http://docs.spring.io/spring-integration/reference/html/redis.html 점 24.1
추가 정보 : 필자는 RedisMetaDataStore 및 SftpSimplePatternFileListFilter을 추가했다. 작동하지만 sftpInboundAdapter가 폴러에 의해 활성화되면 메타 데이터 저장소에있는 각 파일에 대한 항목을 추가 할 때 이상한 점이 하나 있습니다. 10 개의 파일이 있다고 가정하면 데이터 저장소에 10 개의 항목이 있지만 "1 go"에서 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>
감사합니다. Gary, Ive는 제안대로 구현했으며 거의 거기에 있다고 생각합니다. 문제를 설명하는 원래 질문에 추가 정보를 추가했습니다. – sdiaz1000
자세한 내용은 내 대답 편집을 참조하십시오. –
Ive가 작동했습니다. poller에 max-messages-per-poll 속성을 추가하고이를 10으로 설정하면 정상적으로 작동합니다. 감사. – sdiaz1000