【问题标题】:Creating a JMS Correlation ID创建 JMS 相关 ID
【发布时间】:2011-05-05 07:46:29
【问题描述】:

通常不鼓励使用从 JMS 提供程序返回的消息 ID 作为将消息发布到队列中的相关 ID。人们如何为请求/响应架构生成相关 ID?

【问题讨论】:

  • 是吗?规范特别提到使用消息 ID 作为相关 ID。然后它说“在某些情况下”应用程序可能需要滚动您自己的相关 ID。
  • 啊 - 所以你正在处理不符合规范的问题。规范要求设置此字段的能力,因此如果您将 MsgID 移动到 CorrelID 并且值发生更改,则它不符合要求。在兼容的提供者中,这将按预期工作,因为 MsgID 将是唯一的,即使跨消息引擎也是如此,并且您可以可靠地设置 CorrelID。是的,你可能需要自己动手。
  • 对不起,我有两个冲突。首先,我不同意这个前提。我还专门研究没有这个问题的 IBM 的 JMS 实现。从来没有处理过它,我没有评估解决方案的基础,尽管我会在 Stu 的回答中添加评论。

标签: jms


【解决方案1】:

客户可以使用像UUID 这样的唯一 ID 标准来生成新 ID。 Here 对你来说是一个很好的教程。

您可以使用以下代码从 JMS 提供程序返回关联 ID。

message.setJMSCorrelationID(UUID.randomUUID().toString());
producer.send(message);
LOG.info("jms-client sent:" + message.getJMSCorrelationID());  

干杯。

【讨论】:

    【解决方案2】:

    服务器端相关 ID 生成存在两个问题:

    1. 单向协议(如 JMS)无法直接返回 相关 ID 返回给客户端。可以使用另一个频道,但 这使事情变得复杂。

    2. 意外问题可能会阻止客户端接收 即使请求已被接受并且生成的 ID 在服务器上处理。这就是为什么客户端 ID 生成应该 可以考虑。

    客户端生成的相关 ID

    客户端可以使用 UUID 等唯一 ID 标准来生成新 ID

      message.setJMSCorrelationID(UUID.randomUUID().toString());
    

    参考:http://blogs.mulesoft.com/dev/anypoint-platform-dev/total-traceability/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2019-10-20
      • 2021-11-29
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多