如何在使用出站通道适配器发送JMSMessageId后获取它



我用出站通道适配器发送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

最新更新