我正在尝试使用 Spring Integration v4 的 DSL API 编写一个简单的消息流,如下所示:
-> 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 中,而不是响应,而是接收javax.jms.MessageFormatException: MQJMS1061: Unable to deserialize object
在自己的 JmsOutboundgateway 上接收到一个(我认为它无法通过查看日志来反序列化 jms 回复对象) .
我显然没有正确配置某些东西,但我不知道到底是什么。有谁知道我错过了什么?
使用 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.RELEASE。
我的网关配置如下:
@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。