2016-08-25 2 views
1

저는 스프링 통합을 처음 사용합니다.스플리터 후에 스프링 통합 처리 예외가 발생합니다.

일괄 페이로드 (json 배열) 을 요청하는 경우 스플리터를 사용하여 jsonobject ( )로 분할 한 다음 유효성 검사를 수행합니다.

일부 유효성 검사가 실패하고 예외를 오류 채널에 던집니다.

클라이언트에 대한 응답을 생성하여 일부 jsObject가 실패했으며 과 일부 기능이 작동하지 않는다는 것을 나타내는 방법은 무엇입니까?

errorChannel의 처리기가 확실하지 않으므로 유효성 검사 결과가 errorChannel에 비동기가됩니다.

그리고이 게이트웨이를 호출하면 내부의 각 jsObject에 대한 유효성 검사 상태로 전체 페이로드에 대한 유효성 검사 결과를 어떻게 구성 할 수 있습니까?

Future<validationResult> r = gateway.send(...)

(게이트웨이 단지 앞으로 바로 엔드 포인트를 다음에 요청)

답변

1

당신은 Aggregator EIP으로 살펴보고 있습니다 http://www.enterpriseintegrationpatterns.com/patterns/messaging/Aggregator.html, http://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#aggregator.

따라서 모든 개체가 유효성 검사를 위해 전송되며 그 결과 (좋음 또는 나쁨)가 <aggregator>으로 전송되어 해당 게이트웨이에 대한 회신을 위해 validationResult을 하나 만듭니다.

+0

도움 주셔서 감사합니다. 나는 몇 가지 테스트를했는데, 이것에 대한 한 가지 문제점이있다. 스플리터 후에 aggregator에서 향후 그룹화를 위해 메시지에 correlation_id가 할당된다. 그러나 문제는 스플리터 이후의 요소 중 하나가 예외를 throw하면 새로운 메시지를 생성하고 correlation_id가 손실된다는 것입니다. Aggregator는 "CorrelationStrategy가 실패했습니다"라고 불평합니다. 이 문제를 해결해 본 경험이 있습니까? – edi

+0

일부 다운 스트림 구성 요소가 예외를 throw하면'failedMessage' 속성을 사용하여'MessagingException'으로 래핑됩니다. 이것은 필수적인'sequenceNumber','sequenceSize','correlationId'를 포함하여 원래 헤더를 추출 할 수있는 곳입니다. 사실, aggregator로 보내기 전에 새로 만든 메시지에 모든 헤더를 복사합니다. –

+0

네, 그럴 수도 있지만 failedMessage 속성을 포착하지 않았습니다. 나는 오류 채널을 연결하기 위해 int : service-activator를 시도하고, 메쏘드 메시지를 입력 받아서 페이로드와 메시지의 헤더를 출력했다. 실패한 메시지 속성이 없다. 어떤 부분이 잘못되었는지 확실하지 않다. – edi