如何在java中计算IBM MQ的进出时间

时间:2017-10-17 05:19:38

标签: ibm-mq

我在写入MQ之前调用Date()对象。这是我捕获MQ时的方式。如何计算MQ的时间?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是获取MQ消息跟踪解决方案。有很多可用的,你可以在这里找到一个列表:http://www.capitalware.com/mq_tools_comm.html#mqtrk

  • COA是确认到达 - 当邮件被放入目标队列时
  • COD是确认交付 - 当接收应用程序执行MQGET时

为您的问题创建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个时间戳:

  1. MQPUT之前的时间戳

  2. 来自MQPUT的MQMD的putDateTime中返回的时间戳

  3. 在MQMD的putDateTime中返回的COA时间戳 - 匹配的MessageId在CorrelId中
  4. 在MQMD的putDateTime中返回的COD时间戳 - 匹配的MessageId在CorrelId中
  5. 简单。现在,数据库中的每一行都有一条完整的SLA记录,用于记录该消息的历史记录。您可以编写简单的SQL来确定:

    • MQ传递消息需要多长时间,即时间戳#4减去 时间戳#1(或#2)
    • 在接收应用程序接收之前它在队列中停留了多长时间,即时间戳#4减去时间戳#3 - 当有指点时,这是一个重要的数字!!!
    • 当有人说'我们从来没有收到你的信息时' - 时间戳#4是您的证明

    最后,如果您期待回复(回复)消息(假设原始MessageId在CorrelId中),那么您可以将该时间戳作为第5个时间戳添加到DB。即时间戳#5减去时间戳#1(或#2)将为您提供往返时间(请求 - 响应)。