2012-07-28 2 views
4

게이트웨이 및 서비스 활성기로 응답 처리에 대한 설명서를 찾을 수 없습니다. 내가 게이트웨이가있는 경우스프링 통합의 회신 상관 관계 프로세스 세부 정보

: 1) ReqChannel 2 채널로 요청을 보냅니다은) RepChannel

ReqChannel 일부 서비스 활성제 중 하나 경로 수신 메시지는, AServiceActivator을 생각한 것을, 라우터에 연결되어 채널의 응답을 받아 BServiceActivator 및 해당 서비스 활성기에는 구성된 output-channel = "RepChannel"이 있습니다.

다른 스레드에서 비동기 적으로 또는 동시에 게이트웨이 메서드에서 둘 이상의 메서드 호출을 실행하는 경우 게이트웨이가 들어오는 응답을 실제 서비스 호출자와 어떻게 관련 지을 수 있습니까?

답변

7

게이트웨이는 임시 응답 채널을 만들어 메시지 헤더에 넣습니다. 이 메커니즘은 각 메시지가 고유 한 응답 채널을 가져 오기 때문에 필요한 상관 관계를 제공합니다.

최종 소비자 (서비스 활성화 자)에 출력 채널이없는 경우 프레임 워크는 자동으로 replyChannel 헤더에 응답을 보냅니다.

이러한 이유로 일반적으로 최종 소비자가 보낼 게이트웨이에서 응답 채널을 선언 할 필요가 없습니다.

그러나이 방법이 유용 할 때가 있습니다. 예를 들어 회신 채널을 유선으로 연결하거나 게시/구독 채널로 설정하여 결과가 여러 곳으로 전송되는 경우가 있습니다.

이 경우 (게이트웨이에 응답 채널이 있고 최종 사용자가 거기에 메시지를 보내는 경우) 프레임 워크는 명시 적으로 선언 된 응답 채널을 메시지 헤더의 임시 응답 채널에 브리징합니다.

이러한 이유로 인해 flow에 replyChannel 헤더를 유지하는 것이 중요합니다. 원래 메시지의 replyChannel 헤더를 포함하지 않는 한, 응답 채널에 임의의 응답을 보낼 수 없습니다.

+0

ReqChannel의 라우터와 서비스 활성화 자 모두가 응답 채널 헤더 값을 출력 할 것입니다. 그리고이 값은 게이트웨이에서 실제 발신자와의 회신 상관 관계를 조사 할 것입니까? –

+0

예 모든 엔드 포인트는 일반적으로 모든 헤더를 보유합니다 (입력 헤더를 복사하여 출력). 한 가지 예외는 메시지를 결과로 반환하는 사용자 지정 변환기입니다. 이 경우 머리글을 복사하는 것은 사용자 지정 변환기 코드에 달려 있습니다. 다른 구성 요소 (POJO 변환기 포함)의 경우, 입력 헤더는 항상 출력 메시지에 복사되므로 응답 헤더가 다운 스트림에서 사용 가능합니다. –