【问题标题】:get JMSMessageID when use producerTemplate使用 producerTemplate 时获取 JMSMessageID
【发布时间】:2021-08-22 03:25:32
【问题描述】:

在骆驼中,

ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();
producerTemplate.sendBody("endpointqueue?includeSentJMSMessageID=true", ExchangePattern.InOnly, body);

我需要获取从 IBM MQ/ActiveMQ 返回的 JMSMessageID。我正在查看调试模式下的交换值,但找不到它。我只能找到 sessionID。它存储在哪里以及如何获取它?

Camel documentation 说:

includeSentJMSMessageID - 仅在使用 InOnly 发送到 jms 目的地时适用。启用此选项将使用 JMS 客户端在将消息发送到 JMS 目标时使用的实际 JMSMessageID 丰富 Camel Exchange。

includeSentJMSMessageID 与我的需求不同还是我遗漏了什么?

【问题讨论】:

    标签: apache-camel jms


    【解决方案1】:

    文档说 JMS MessageID 可用作标头。 所以你应该可以像这样返回它:

    from("direct:queueMessage")
        .to("jms://myqueue?includeSentJMSMessageID=true")
        .setBody().simple("${header.JMSMessageID}");
    

    然后使用以下方式发送您的消息:

    String msgId = producerTemplate.requestBody("direct:queueMessage", body, String.class);
    

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多