2017-10-17 70 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)會給你往返時間(請求 - 響應)。