2014-11-25 3 views
0

나는 jms : message-driven-channel-adapter을 가지고 있고 그 다운 스트림에는 인 의 아웃 바운드 게이트웨이가 있습니다. I처럼 하나 개의 스레드에서의 채널 어댑터에서 메시지를받을 때마다 문제가 발생 아래JMS 아웃 바운드 게이트웨이와 함께 Spring Message Driven Channel Adapter

[org.springframework.jms.listener.DefaultMessageListenerContainer ** ** # 1-4] 아래와 같은 다른 therad 및 게이트웨이 응답 :

[org.springframework.jms.listener.DefaultMessageListenerContainer ** # 3-5 **].

내가 이상한 예외가 :

org.springframework.integration.MessageRejectedException : 메시지 인해 XML 유효성 검사 오류로 거부; 중첩 예외는 org.springframework.integration.xml.AggregatedXmlMessageValidationException : 복수 원인 : cvc-elt.1 : 'NS1 : FindPermitsByPersonNoRes'요소의 선언을 찾을 수 없습니다.

하지만 두 스레드 ID가 동일 할 때마다 예외가 없습니다. 다음은

내 게이트웨이의 설정이다, 응답은 항상 (응답 리스너 컨테이너에 의해 소유) 별도의 스레드에서 게이트웨이에 전달되는 <reply-listener/>

<int:header-enricher> 
     <int:header name="jms_replyTo" ref="outboundQueue" overwrite="true"/> 
     <int:header name="jms_type" type="java.lang.String" value="1" overwrite="true" /> 
     <int:header name="jms_correlationId" type="java.lang.String" expression="T(java.util.UUID).randomUUID().toString()" overwrite="true" /> 
    </int:header-enricher> 

    <jms:outbound-gateway 
     request-channel="gateway_request_channel" 
     request-destination="inboundQueue" 
     reply-destination="outboundQueue" 
     correlation-key="JMSCorrelationID" 
     connection-factory="brokerConnectionFactory"> 

     <jms:reply-listener/> 

    </jms:outbound-gateway> 

답변

1

; 게이트웨이 내부의 응답을 기다리고있는 첫 번째 스레드로 전달됩니다. 그래서 다른 일이 벌어지고 있습니다. 전체 스택 추적 및 구성을 표시해야합니다.

replyTocorrelationId 헤더를 설정할 필요가 없습니다. 게이트웨이가 모든 것을 처리 할 것입니다.

+0

당신이 말했듯이이 문제를 일으키는 구성 오류가있었습니다. 이유는 다음과 같은 이유 때문에 지정하고있는 correlationId입니다. 참고 : 를 사용할 때 데이터에는 게이트웨이를 나타내는 UUID와 메시지 식별자가 포함됩니다. 이러한 이유 때문에 를 사용하려면 명시적인 응답 대상이 인 경우 '상관 키'의 지정이 필요합니다. " – Noor

+0

예"correlation-key "를 다음에 지정해야합니다. 게이트웨이는 어디에 저장 할지를 알려주지 만 게이트 웨 이는 값을 설정하는 것을 처리합니다 (그리고 replyTo). –

+0

JMSCorrelationID를 상관 관계 키로 지정할 때마다 디버그 로그는 메시지 뒤에 JMSCorrelationID 값이 null로 설정된 것을 보여줍니다 JMS 메시지로의 변환 .jms_correlationId 헤더를 명시 적으로 지정하더라도 동작은 동일하지만, 값을 지정하지 않으면 messageId가 기본값으로 설정됩니다. 와 함께 사용할 옵션을 혼란스럽게합니다. 메시지가 올바른 소비자 쓰레드로 돌아가는 지 확인하십시오. – Noor

관련 문제