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

Spring integration 如何使用Jms.inboundGateway将回复发布回指定为replyTo标头的回复队列,spring-integration,Spring Integration,我正在使用 MessageProducerSupport messageProducer = Jms.messageDriverChannelAdapter(jmsConnectionFactory, TransactedMessageListenerContainer.class) .destination(queue) .get(); 使用ActiveMQ队列中的

我正在使用

MessageProducerSupport messageProducer =
                Jms.messageDriverChannelAdapter(jmsConnectionFactory, TransactedMessageListenerContainer.class)
                        .destination(queue)
                        .get();
使用ActiveMQ队列中的消息

这是我的
集成流程的第一部分,然后在事务中出现多个阶段(转换、路由、句柄…)
它用于处理来自上游的消息

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

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

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

是的,这是正确的,应该在其(消息传递网关)前提下工作

Jms.inboundGateway()
基于
ChannelPublishingJmsMessageListener
,带有
expectReply=true
,其中有一个代码:

private Destination getReplyDestination(javax.jms.Message request, Session session) throws JMSException {
    Destination replyTo = request.getJMSReplyTo();
    ....
    return replyTo;
}
从请求中获取一个
replyTo

如果流中的最后一个
MessageHandler
AbstractReplyProducingMessageHandler
,并且确实从标题返回要生成的内容到
replyChannel
,那么一切都很好


如果您不确定您的情况,那么请分享您的信息流的结尾以及您希望发送回复的位置。

是的,这是正确的,应该在其(消息网关)前提下工作

Jms.inboundGateway()
基于
ChannelPublishingJmsMessageListener
,带有
expectReply=true
,其中有一个代码:

private Destination getReplyDestination(javax.jms.Message request, Session session) throws JMSException {
    Destination replyTo = request.getJMSReplyTo();
    ....
    return replyTo;
}
从请求中获取一个
replyTo

如果流中的最后一个
MessageHandler
AbstractReplyProducingMessageHandler
,并且确实从标题返回要生成的内容到
replyChannel
,那么一切都很好


如果您不确定您的情况,那么请分享流程的结尾以及您希望发送回复的位置。

嗨,阿尔特姆,是的,确实如此,如果我将
AbstractReplyProducingMessageHandler
放在流程的结尾,回复将被发送回来。问题是,当传入消息停止时(例如在筛选器上),ACK不会发送回replyTo队列。为了让您了解我为什么要实现这一点,我想使用gatling:Well对应用程序进行负载测试。这就是我问的原因。您应该具有最后一个
.handle()
和一些有价值的
返回值。这将成为对JMS的答复。请参阅是否可以在最后一个
handle()
之后添加其他内容,例如
transform
&
channel
我当前的设置是3个
IntegrationFlow
s,中间有2个JMS队列。因此,我希望在每次可能的时候,即在每个流的末尾,都向JMS发送回复。是的,您可以,有足够的内容来完成您的流,返回非空值。您应该记住,如果
.handle()
不返回任何内容或
null
则无法继续此流程。当你在代码> > NouttLutLCH < /C>上等待时,考虑正常的java程序,但是没有人会倒计时。这就是消息传递中请求-回复的工作原理。明白了!我要试一下。谢谢你的帮助!您好,Artem,是的,确实如此,如果我在流的末尾放置
AbstractReplyProducingMessageHandler
,则会返回reply。问题是,当传入消息停止时(例如在筛选器上),ACK不会发送回replyTo队列。为了让您了解我为什么要实现这一点,我想使用gatling:Well对应用程序进行负载测试。这就是我问的原因。您应该具有最后一个
.handle()
和一些有价值的
返回值。这将成为对JMS的答复。请参阅是否可以在最后一个
handle()
之后添加其他内容,例如
transform
&
channel
我当前的设置是3个
IntegrationFlow
s,中间有2个JMS队列。因此,我希望在每次可能的时候,即在每个流的末尾,都向JMS发送回复。是的,您可以,有足够的内容来完成您的流,返回非空值。您应该记住,如果
.handle()
不返回任何内容或
null
则无法继续此流程。当你在代码> > NouttLutLCH < /C>上等待时,考虑正常的java程序,但是没有人会倒计时。这就是消息传递中请求-回复的工作原理。明白了!我要试一下。谢谢你的帮助!