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程序,但是没有人会倒计时。这就是消息传递中请求-回复的工作原理。明白了!我要试一下。谢谢你的帮助!