我正在爲某些IBM MQ隊列的監視器應用程序工作。我試圖實現一種方式,我可以將所有消息從一個隊列傳輸到另一個隊列。 get(msg)方法是否會從隊列中刪除消息?或者它只是檢索它的副本?從IBM MQQueue刪除消息
這裏是我的代碼:
private void moveMessages(String qName, String moveToThisQ) {
try {
MQQueue q = qm.accessQueue(qName, MQConstants.MQOO_INQUIRE);
MQQueue qMoveHere = qm.accessQueue(moveToThisQ,
MQConstants.MQOO_INQUIRE);
while (q.getCurrentDepth() != 0) {
MQMessage msg = new MQMessage();
q.get(msg);
qMoveHere.put(msg);
}
if (q != null)
q.close();
if (qMoveHere != null)
qMoveHere.close();
} catch (MQException e) {
e.printStackTrace();
}
}
如果有人可以提供任何洞察力壽的get(MSG)的影響將有隊列?從我看過的例子中,我可能不得不隨get方法一起傳遞選項嗎?也許不會?!
我希望這段代碼不適用於生產系統!如果您嘗試清空隊列,請循環,直到GET返回2033的原因代碼。正如羅傑指出的那樣,檢查深度對您而言並不可靠。另外,除非你準備冒失去的風險,否則一定要在同步點下進行GET和PUT。這是寫的方式,你很容易失去信息。例如,如果目標隊列填滿,則在PUT上獲取該錯誤之前從源隊列獲取的最後一條消息是吐司。 –