내가 같을 것이다 봄 통합 V4의 DSL API를 사용하여 간단한 메시지 흐름 쓰기를 시도하고있다 : 나는를 주입 할 때,봄 통합 4 비동기 요청/응답
-> in.ch -> Processing -> JmsGatewayOut -> JMS_OUT_QUEUE
Gateway
<- out.ch <- Processing <- JmsGatewayIn <- JMS_IN_QUEUE
요청/응답 비동기 인 상태를 메시지를 전달하면 메시지는 JMS_OUT_QUEUE로 계속 이동합니다. 이 메시지 흐름을 넘어서는 응답 메시지는 다시 JMS_IN_QUEUE에 저장되며 JmsGatewayIn에 의해 선택됩니다. 이 시점에서 메시지는 처리되고 out.ch에 배치됩니다 (응답을 out.ch에 도착시키는 이유는 거기에 배치되는 메시지를 기록하는 로거 인터셉터가 있기 때문입니다). 그러나 게이트웨이는 결코 응답을 수신하지 않습니다. 대신 응답
, JMS_OUT_QUEUE에서 메시지를 집어 JMS_IN_QUEUE에 응답을 배치이 메시지 흐름의 외부 시스템 (I 그것으로부터 JMS 응답 객체 직렬화 실패 생각 자체 JmsOutboundgateway에 javax.jms.MessageFormatException: MQJMS1061: Unable to deserialize object
수신 로그를보고).
분명히 올바르게 구성된 항목이 없지만 정확히 무엇을 모르겠습니다. 아무도 내가 빠진 것을 아는가?
spring-integration-core-4.0.3.RELEASE, spring-integration-jms-4.0.3.RELEASE, spring-integration-java-dsl-1.0.0.M2, spring-jms-4.0으로 작업하십시오. 6. 릴리스. 다음과 같이
내 게이트웨이 구성되어 다음과 같이
@MessagingGateway
public interface WsGateway {
@Gateway(requestChannel = "in.ch", replyChannel = "out.ch",
replyTimeout = 45000)
AResponse process(ARequest request);
}
내 통합 흐름이 구성되어
@Configuration
@EnableIntegration
@IntegrationComponentScan
@ComponentScan
public class IntegrationConfig {
@Bean(name = "in.ch")
public DirectChannel inCh() {
return new DirectChannel();
}
@Bean(name = "out.ch")
public DirectChannel outCh() {
return new DirectChannel();
}
@Autowired
private MQQueueConnectionFactory mqConnectionFactory;
@Bean
public IntegrationFlow requestFlow() {
return IntegrationFlows.from("in.ch")
.handle("processor", "processARequest")
.handle(Jms.outboundGateway(mqConnectionFactory)
.requestDestination("JMS_OUT_QUEUE")
.correlationKey("JMSCorrelationID")
.get();
}
@Bean
public IntegrationFlow responseFlow() {
return IntegrationFlows.from(Jms.inboundGateway(mqConnectionFactory)
.destination("JMS_IN_QUEUE"))
.handle("processor", "processAResponse")
.channel("out.ch")
.get();
}
}
감사합니다 여기에 대한 도움, PM을 위해. 모든 구성의 첫 번째
안녕, 당신의 솔루션 덕분에 맞습니다. 나는 Jms In/Out 게이트웨이를 Jms In/Out 어댑터로 교체하려고 시도했지만 그 역시 구성하는 데 문제가있었습니다. 그렇다면 replyDestination을 사용하는 Jms Out Gateway 만 솔루션에서와 같이 시도해 보았습니다. 내가 언급 한 것처럼 초기 @ Gateway의 replyChannel을 제거하지 않았습니다. 감사! –
안녕하세요, 저는 다시이 게시물로 돌아올 필요가 있음을 발견합니다 ... 비동기 응답을 허용하기 위해 별도의 JMS 인바운드/아웃 바운드 어댑터를 사용해야한다고 생각하는 요구 사항이 있습니다. 이 작업을 수행하기 위해 WsGateway에서 replyChannel = "out.ch"를 다시 설정하고 Jms.outboundAdapter 및 Jms.inboundAdapter로 Jms.outboundGateway를 전환하고 보내기 전에 메시지에 JMSCorrelationID 헤더를 설정했지만, 응답이 돌아와서 out.ch에 배치되면 WsGateway는 응답 메시지를받지 못합니다. 내 SI 흐름은 실제로 여기 보이는 것보다 좀 더 복잡합니다 ... –
요청을 보내기 전에' '과 함께''를 사용하십시오. –