2016-10-06 2 views
2

저는 스프링 통합을 사용하고 있으며 그룹을 10k 팩으로 묶어야합니다. 나중에 10k가 훨씬 더 커지고 영구 저장 장치가 될 수 있기 때문에 목록에 저장하고 싶지 않습니다. 난 그저 여러 스레드가 하나의 스레드에 메시지를 보내서 그 디스크를 계산하고 10k 라인을 포함하는 파일로 디스크에 기록하기를 원합니다. 카운터가 10k에 도달하면 새로운 파일 세트를 생성하여 카운터를 0으로 설정합니다. 그것은 직접 채널하지만 어떻게 여러 스레드에게 함께 잘 작동 할 단일 스레드로 메시지를 보낼 수 (나는 목록이없는 집계 메시지

<int:dispatcher task-executor="executor" /> 

을 사용하고 있습니다)? 감사합니다

답변

0

QueueChannel으로 작업을 수행 할 수 있습니다. 모든 스레드는 동시에 메시지를 보낼 수 있습니다. 다른 쪽에서는 요청한대로 PollingConsumerfixed-delay 폴러 (단일 스레드)로 구성해야합니다. 내 말은 fixed-delay 인 폴러와 DirectChannel 인 모든 다운 스트림은 단일 스레드에서만 수행된다는 의미입니다. 따라서 카운트 및 롤오버 논리에 도달 할 수 있습니다.

구성이 간단하기 때문에 표시 할 내용이 없습니다. 다른 서비스가 동일한 QueueChannel에 메시지를 보냅니다. fixed-delay 폴러는 단일 스레드 읽기를 보장합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 모든 메시지를 고정 지연 지연 수신하지 않습니다. 즉 고정 지연 = 10으로 설정하더라도 모든 메시지가 지연 10ms로 폴링됩니까? 데이터가 많아 최대한 빨리 처리해야합니다. AtomicIntegerCounter에 대해 궁금 해서요. 콩이 애플리케이션 컨텍스트마다 싱글 톤이기 때문에 이것은 멀티 스레드 환경에서 작동해야합니까? –

+0

오, 나는 내가 지연 = 0을 설정할 수 있다는 것을 깨달았다. 그래서 나는 내가 필요한 것, 감사합니다. –

관련 문제