如何使用Jms.inboundGateway将回复发布回指定为replyTo标头的回复队列

时间:2016-03-24 21:09:52

标签: spring-integration

我正在使用

MessageProducerSupport messageProducer =
                Jms.messageDriverChannelAdapter(jmsConnectionFactory, TransactedMessageListenerContainer.class)
                        .destination(queue)
                        .get();

使用来自ActiveMQ队列的消息。

这是我的IntegrationFlow的第一部分,然后在事务中发生多个阶段(转换,路由,句柄..) 它是处理来自上游的消息

为了从Spring集成管道获取ACK,我使用了Jms.inboundGateway(jmsConnectionFactory, TransactedMessageListenerContainer.class),这不会破坏现有的流程并且一切正常

当我设置上游消息的replyTo标头时,我会假设Spring Integration会将IntegrationFlow的最后一个阶段的对象发送回replyTo队列

我的方法是否正确? 是否有可能实现这样的用例?

1 个答案:

答案 0 :(得分:0)

是的,这是正确的,应该通过它的(Messaging Gateway)前提。

Jms.inboundGateway()基于ChannelPublishingJmsMessageListenerexpectReply = true,并且有一个代码:

private Destination getReplyDestination(javax.jms.Message request, Session session) throws JMSException {
    Destination replyTo = request.getJMSReplyTo();
    ....
    return replyTo;
}

从请求中获取replyTo

如果流程中的最后一个MessageHandlerAbstractReplyProducingMessageHandler,并且真正从标题中返回要生成replyChannel的内容,那么一切运作良好。

如果您对自己的情况不确定,请分享您的流程结束以及您希望发送回复的地方。