【问题标题】:Apache Camel + QPid set messageid to UUID not workingApache Camel + QPid 将 messageid 设置为 UUID 不起作用
【发布时间】:2015-11-27 23:59:33
【问题描述】:

我们有一个使用 Apache Camel 2.15.2 和 Apache Qpid 0.4.0 的应用程序,它通过 Amqp 向 Microsoft 服务总线 1.1 发送和接收消息。

我们最近从旧的 Qpid 0.32 升级了 Qpid,现在我们遇到了一个问题,我们无法将 AMQP 消息的 messageId 设置为接收方要求的 UUID。设置的 messageId 是在 Qpid 的 JmsSession 类中创建的字符串。例如它看起来像:“CLIENT115-61957-114498109876-0:15:1-1”

在这个文件中: https://github.com/apache/qpid-jms/blob/master/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java我们可以看到如下:

  1. 在第 709 行,messageId 是通过调用 getNextMessageId(producer) 方法创建的
  2. 在第 923 行,我们看到这个 messageId 是使用生产者 ID 和消息序列生成的。

这永远不会产生格式化为 UUID 的消息 id。我是否遗漏了什么,或者根本无法使用 Apache QPID 将 messageId 设置为 UUID?

【问题讨论】:

    标签: java apache-camel amqp qpid


    【解决方案1】:

    客户端不会也不能将 UUID 设置为 MessageID,并且您永远不应依赖 JMSMessageID 值是特定格式,因为这是供应商特定的值,在不同的 JMS 客户端库之间可能会有所不同。

    如果您的应用程序依赖于分配给它们的特定 ID 的消息,该 ID 可以由您的接收器应用程序关联,那么您应该为此使用消息属性,因为这就是它们的用途。

    【讨论】:

    • 感谢您的回复!我们的问题是我们发布了一个所有供应商都必须遵循的消息规范,并且该规范声明 messageId 应该是 UUID 格式。在这个阶段,我认为很难改变规范,这让我们处于一个棘手的境地。
    • 我很确定 JMS 客户端的所有实现者都不会同意修改他们的客户端实现以满足您的业务规范。
    • 我知道这一点,但我还是为此打开了一个问题。由于这在以前的版本中有效,我认为如果它现在也可以工作会很好。看看如何处理这个问题将会很有趣。 issues.apache.org/jira/browse/QPIDJMS-105
    • 重要的是要记住,新客户端不是旧客户端,如果将来您更改为其他一些 JMS 客户端,它将再次崩溃。
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2011-06-24
    • 2014-07-19
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 2015-08-03
    • 2023-04-09
    相关资源
    最近更新 更多