我在写入MQ之前调用Date()对象。这是我捕获MQ时的方式。如何计算MQ的时间?
答案 0 :(得分:1)
最简单的解决方案是获取MQ消息跟踪解决方案。有很多可用的,你可以在这里找到一个列表:http://www.capitalware.com/mq_tools_comm.html#mqtrk
为您的问题创建COA / COD解决方案并不困难或复杂。当我担任使用MQ的COA / COD的顾问时,我为客户创建了许多SLA解决方案。
如果消息保留在同一个队列管理器中,那么生活就非常容易。如果没有,那么您需要知道使用原始消息的UserId返回COD消息(而不是COA)。因此,您需要计划拥有正确的安全权限,否则COD消息将落入DLQ(死信队列)。
找到一个可供使用的数据库 - 它可以是您的公司数据库,也可以是简单的数据库,如SQLite,H2等。
人们问的第一个问题是如何将所有东西联系在一起。即什么钥匙。简单,使用MQMD MessageId。当应用程序执行MQPUT时,将填充MQMD MessageId。
其次,确保原始消息已完成以下MQMD字段:replyToQueueName,replyToQueueManagerName和report。
第三,COA和COD消息将在其MQMD CorrelId字段中包含原始消息的MessageId。
您可以使用3个或4个时间戳。额外的时间戳可以是您执行MQPUT之前的时间。让我们说你想要4个时间戳:
MQPUT之前的时间戳
来自MQPUT的MQMD的putDateTime中返回的时间戳
简单。现在,数据库中的每一行都有一条完整的SLA记录,用于记录该消息的历史记录。您可以编写简单的SQL来确定:
最后,如果您期待回复(回复)消息(假设原始MessageId在CorrelId中),那么您可以将该时间戳作为第5个时间戳添加到DB。即时间戳#5减去时间戳#1(或#2)将为您提供往返时间(请求 - 响应)。