2010-11-04 70 views
8

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

+0

这是什么?该规范特别提到使用消息ID作为关联ID。然后它会说“在某些情况下”应用程序可能需要推出自己的关联ID。 – 2010-11-04 21:24:39

+0

检查此链接。 http://www.theserverside.com/discussions/thread.tss?thread_id=44779 – onejigtwojig 2010-11-04 21:26:37

+0

啊 - 所以你正在处理规范违规问题。该规范强制设置此字段的能力,因此如果将MsgID移动到CorrelID并且值发生更改,则不符合规定。在兼容的提供程序中,这将按预期工作,因为即使在消息引擎中,MsgID也是唯一的,您可以可靠地设置CorrelID。是的,你可能需要推出自己的。 – 2010-11-05 13:16:06

回答

2

客户端可以使用一个唯一的ID标准像UUID生成一个新的ID。 Here是很好的教程给你。

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

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

干杯。

1

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

  1. 单向协议(如JMS)有返回 相关ID返回给客户端的直接手段。可以使用另一个频道,但使事情复杂化。

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

客户端生成的关联标识

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

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

编号:http://blogs.mulesoft.com/dev/anypoint-platform-dev/total-traceability/