여러 소스의 데이터를 받아들이는 시스템이 있습니다. 클라이언트 (내가 제어 할 수없는 제 3 자 클라이언트)는 스레드 풀의 모든 데이터 소스를 처리합니다. 콜백을 등록 할 수 있으며 다른 스레드에서 콜백이 트리거됩니다. 게이트웨이를 사용하여 별도의 채널에 데이터를 보냅니다. 각 채널을 처리 한 후 각 채널을 하나의 채널로 변환하려고했습니다. 이는 대부분의 처리가 서로 다른 출처의 데이터에서 동일하기 때문입니다. 다음은 샘플 XML스프링 통합시 여러 스레드에서 여러 스레드의 메시지를 하나의 채널로 보냅니다.
<gateway default-request-channel="a" />
<channel id='a'/>
<gateway default-request-channel="b" />
<channel id='b'/>
<!-- inputs to a and b can be from different threads -->
<channel id='c' />
<transformer input-channel="a" output-channel="c" />
<transformer input-channel="b" output-channel="c" />
<outbound-channel-adapter channel="c" />
입니다 변압기가 다른 스레드에서 작동하는 것과 동일한 채널에 두 개의 변압기 출력, 동시성 문제가있을 것입니다 때? 하나의 스레드 만 'c'채널을 처리하도록 할 수 있습니까? 그렇지 않으면 동일한 채널에서 여러 스레드를 처리 할 때 권장되는 방법은 무엇입니까?
outbound-channel-adapter를 호출하기 전에 채널'c'에서 일련의 변환/강화/라우팅을 수행해야합니다. 내 모든 POJO 메서드는 스레드로부터 안전합니다. 그런 다음' '를 채널'c'에서 사용할 수 있으며 스레딩 문제는 걱정하지 않아도됩니까? ''rendezvous-queue'를 갖도록 구성된 여러 개의 스레드가있는 샘플 프로그램을'a'와'b' 채널에 보내고'c' 채널의 수신 POJO는 항상 같은 스레드 ID를 가졌습니다. –
Jijith