我用出站通道适配器发送JMS消息,如下所示:
<intjms:outbound-channel-adapter
destination-name="MY.QUEUE"
connection-factory="myConnectionFactory"
channel="mySender"/>
在这之后,我需要知道JMS消息Id。我如何获得它?
有一种方法可以在适配器中提供的自定义JmsTemplate
中实现,但也许有一个更简单的解决方案可以解决这个问题。
我无法使用网关,因为没有响应。
您可以将JMS Message
作为Spring Integration Message的payload
发送到该适配器。并在发送成功后使用其getJMSMessageID()
。
更新
但这意味着我不能使用JmsTemplate的便利性,必须自己处理javax.jms.Connection和javax.jms.Session才能创建javax.jms.消息,对吗?
没有人禁止你直接使用JmsTemplate
作为一般<service-activator>
的参考。<outbound-channel-adapter>
是目标的单向。因此,它真的不打算归还任何东西。您的角落案例确实需要做一些事情。这就是创建JMS消息的javax.jms.Session
挂钩和技巧,以便能够在之后检索其ID
。在自定义JmsHeaderMapper
和来自其fromHeaders()
实现的消息访问上有一个ThreadLocal
漏洞,但我认为在这种情况下,最好直接使用JmsTemplate
。