创建JMS关联ID

创建JMS关联ID,jms,Jms,通常不建议使用JMS提供程序返回的消息id作为将消息发布到队列中的相关id。人们是如何为请求/响应体系结构生成相关ID的?客户端可以使用独特的ID标准,如UUID来生成新ID。 这是一个很好的教程 您可以使用以下代码从JMS提供程序返回相关id message.setJMSCorrelationID(UUID.randomUUID().toString()); producer.send(message); LOG.info("jms-client sent:" + message.getJMS

通常不建议使用JMS提供程序返回的消息id作为将消息发布到队列中的相关id。人们是如何为请求/响应体系结构生成相关ID的?

客户端可以使用独特的ID标准,如
UUID
来生成新ID。 这是一个很好的教程

您可以使用以下代码从JMS提供程序返回相关id

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

干杯。

但是服务器端关联ID生成遇到了两个问题:

  • 单向协议(如JMS)没有直接返回 将相关ID返回到客户端。可以使用另一个频道,但是 这使事情复杂化了

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

  • 客户端生成的相关ID


    客户端可以使用像UUID这样的唯一ID标准来生成新ID

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

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