【问题标题】:How to duplicate javax.jms.TextMessage without Jms session object如何在没有 Jms 会话对象的情况下复制 javax.jms.TextMessage
【发布时间】:2019-10-24 02:17:05
【问题描述】:

我正在使用 Spring JMS @JmsListener 注解收听 MQ Q。

    @JmsListener(destination = "${qNmae}", 
                    containerFactory = "jmsListenerContainerFactory2")
    public void processMessage(Message<String> msg) throws JMSException {

    }

我需要将 Spring Message 对象转换为 New JMS TextMessage。我知道我可以放置 TextMessage 类型的方法参数而不是 Message 并且 Spring 会自动转换它,但是我得到了不可变的对象,但是我的代码要求我保留现有的标头并在某些情况下添加新的标头。 基本上我正在寻找复制 JMS Message/TextMessage 对象的正确方法,这样我就可以在没有 JMS Session 对象的情况下添加自己的标题(因为我正在使用@JmsListener,我不想自己创建新会话只是为了创建新消息)。

【问题讨论】:

  • ibm Message/TextMessage 实现中没有克隆方法?
  • 这是我想到的第一件事,但是当我检查时没有
  • 你打算如何处理克隆的消息?
  • 我必须对消息的有效负载执行一些业务逻辑,如果出现错误/失败,我需要将该信息添加到标头中(我还需要保留原始标头)并发送它到另一个Q

标签: java jms ibm-mq spring-jms jms-session


【解决方案1】:

在这种情况下,您可以创建 Message 的新实例并复制标头或将会话作为参数添加到您的方法 processMessage 和 spring 将注入可用于创建新消息的会话(取决于实现,但我认为session 只会创建一个新实例,如第一个提案)并复制标题

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-04-25
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2011-01-31
    相关资源
    最近更新 更多