【问题标题】:jmsMessage.setJMSMessageID(...) not working? (How to set customised messageID to JMS message ?)jmsMessage.setJMSMessageID(...) 不工作? (如何将自定义的 messageID 设置为 JMS 消息?)
【发布时间】:2019-06-24 22:47:35
【问题描述】:

我想在 HornetQ 中发送 JMS 消息时按 1、2、3.... 的顺序发送 setJMSMessageID。但是每当我尝试将自定义的 MessageID 设置为 JMS 消息时,在消费者端,同一 JMS 消息的 MessageID 是不同的。

这样做时,我发现 JMS MessageID 有一些特定的格式。那么如何设置我的自定义 MessageID?

【问题讨论】:

    标签: jms hornetq


    【解决方案1】:

    根据 API 文档,

    http://docs.oracle.com/javaee/5/api/javax/jms/Message.html#setJMSMessageID%28java.lang.String%29

    JMS 提供程序在发送消息时设置 messageID 字段。

    在发送消息之前,您不能用您自己的 JMSMessageID 覆盖 JMS 提供者设置的 messageID。您想设置自己的消息 ID 是否有特殊原因?

    如果您希望监控序列,也许您可​​以考虑将此类信息存储在消息本身的内容中,或作为消息属性。

    【讨论】:

    • 是的,您可以设置自定义的 JMSMessageID,但这只能在发送消息后进行。这可能在发送消息后发生在发送方,或者在接收到消息后发生在接收方。请注意,接收者无论如何都无法接收到自定义的 JMSMessageID。
    • 因此,如果消费者不会读取相同的 messageID,则在发送消息后没有设置自定义 JMS messageID 的意义。实际上我的要求是相同的 msgID(自定义)被设置为响应 msg 的相关 ID .....我如何实现它?
    • 您根本无法操作 JMSMessageID。尝试在 JMS 消息正文中设置您需要的内容。例如,您可以输入内容:“custom-id: 12345”,然后从消息正文中读取此值。这样,您根本不必触摸 JMSMessageID 标头。
    • 因为如果我们不能操作 JMS MessageID 那么他们不应该指定 api 来设置 MessageId (setJMSMessageID())...应该有一些 api setJMSMessageId(..)....的用法......跨度>
    • 是的,我确信您根本无法操纵 JMSMessageID。请参阅我上面提供的 javadoc 链接。这在 javadocs 中有明确说明。 API setJMSMessageID() 是为 JMS 提供者提供的,用于在发送消息之前设置 messageID,而不是为开发人员提供。除非您希望在收到消息后修改 JMSMessageID,这不是您想要实现的目标在这里。
    【解决方案2】:

    我正在使用 setJMSCorrelationID 设置自定义 ID。在接收端,您可以使用 getJMSCorrelationID 来检索相同的..

    【讨论】:

    • 是的,就是这样!
    猜你喜欢
    • 2021-05-07
    • 2018-09-26
    • 2015-07-13
    • 2017-02-21
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多