2017-10-17 108 views
0

我在写入MQ之前调用Date()对象。这是我捕获MQ的时间。如何计算MQ的时间?如何在java中计算IBM MQ的进出时间

+0

“out time”是什么意思?您指的是您的PUT何时完成,并且MQ没有返回异常,或者您指的是将读取消息的应用程序收到消息的时间? – JoshMc

+0

@JoshMc我指的是应用程序收到消息的时间,例如Flume – Saumya

+0

接收应用程序在接收到消息时是否可以通过调用Date()来记录类似的“out time”?如果你正在寻找发送应用程序有这个时间,那么从接收应用程序返回给发送应用程序的返回ACK消息是很好的,我建议远离COD消息,但这也是另一种选择。 – JoshMc

回答

1

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

  • COA是到达的确认 - 当消息放入目标队列
  • COD是交货的确认 - 当接收应用程序执行的MQGET

为您的问题创建COA/COD解决方案并不困难或复杂。当我是使用MQ的COA/COD的顾问时,我为客户创建了许多SLA解决方案。

如果消息保留在同一个队列管理器中,那么生活是非常容易的。如果不是,那么您需要知道COD消息(不是COA)是使用原始消息的UserId返回的。因此,您需要计划获得正确的安全许可或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. 时间戳在MQMD的putDateTime返回从MQPUT

  3. COA时间戳在MQMD的putDateTime返回 - 匹配的MessageId是CorrelId中
  4. COD时间戳在MQMD的putDateTime返回 - 匹配的MessageId是CorrelId中

简单。现在,您数据库中的每行都有该消息历史记录的完整SLA记录。您可以编写简单的SQL来确定:

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

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