事件處理

在事件通知方面,連接器會偵測應用程式而非資料庫觸發所寫入佇列中的事件。當應用程式或其他可啟用 MQ 的軟體產生 WebSphere MQ 訊息並將它們儲存在 MQ 訊息佇列上時,便會發生事件。

擷取

連接器使用 pollForEvents() 方法來定期輪詢 MQ 佇列中的訊息。當連接器找到訊息時, 就從 MQ 佇列中擷取訊息並查驗以判斷其格式。

若格式已於連接器的靜態物件中定義,連接器會將訊息主體及格式相關之商業物件的新實例傳送至已配置的資料處理常式; 資料處理常式將對商業物件輸入資料並指定動詞。 若格式未定義於靜態 Meta 物件中,則連接器只將訊息主體傳送到資料處理常式; 資料處理常式將針對訊息來判斷、建立及輸入訊息到正確的商業物件。 有關於事件失敗情況,請參閱"錯誤處理"

連接器在處理訊息時,首先將對輸入佇列開啟交易式階段作業。若連接器順利地送出商業物件,但無法確定佇列中的交易, 則可能導致商業物件遞送兩次到協同作業,而此交易式方法可儘量避免這種情形。為避免此問題,連接器將所有訊息移至進行中佇列。訊息保留於此處,直到處理完成為止。 如果連接器在處理期間非預期地關閉,則訊息會保留在進行中佇列內,而不會復原到原始的輸入佇列中。

註:
對 JMS 服務提供者的交易式階段作業需要先執行並確定佇列上每一個所要求的動作, 才能夠從佇列中移除事件。因此,當連接器從佇列擷取訊息時,在發生下列三件事之前並不會確定擷取: 1) 訊息已轉換成商業物件;2) 商業物件已由 gotApplEvents() 方法遞送至 InterChange Server;3) 收到回覆值。

同步事件處理

(選用) 為了支援想要針對透過 WebSphere MQ 發出之要求回饋的應用程式,WebSphere MQ 的連接器會在要求處理過後將訊息報告發送回應用程式,並詳述其要求輸出結果。

要達成此點,連接器會同步地將此類要求的商業資料公佈到 InterChange Server。如果協同作業順利處理商業物件, 則連接器會將報告送回要求者,包括 InterChange Server 的回覆碼以及任何商業物件變更。如果連接器或協同作業無法處理商業物件, 則連接器會傳送包含適當錯誤碼及錯誤訊息的報告。

在任一種情況下,都會通知傳送要求至 WebSphere MQ 連接器的應用程式其輸出結果。

處理程序

如果 WebSphere MQ 的連接器收到要求正面或負面確認報告 (PAN 或 NAN) 的任何訊息, 它會將訊息內容同步公佈到 InterChange Server,然後將回覆碼及已修改的商業資料納入將傳送回要求端應用程式的報告訊息。

下表顯示傳送至連接器進行同步處理的 WebSphere MQ 訊息必要結構。


MQMD 欄位 說明 受支援的值 (使用邏輯 OR,以支援多重值)
MessageType 訊息類型 DATAGRAM
report 所要求之報告訊息的選項 您可以指定下列其中一項或全部:
  • MQRO_PAN 如果可以順利處理商業物件,則連接器會傳送報告訊息。
  • MQRO_NAN 如果處理商業物件時發生錯誤,則連接器會傳送報告訊息。

您可以指定下列其中一項,來控制如何設定報告訊息的相互關係 ID:

  • MQRO_COPY_MSG_ID_TO_CORREL_ID 連接器將要求訊息的訊息 ID 複製到報告的相互關係 ID。這是預設動作。
  • MQRO_PASS_CORREL_ID 連接器將要求訊息的相互關係 ID 複製到報告的相互關係 ID。
ReplyToQueue 回覆佇列的名稱 報告訊息傳送目標的佇列名稱。
replyToQueueManager 佇列管理程式的名稱 報告訊息傳送目標的佇列管理程式名稱。
訊息主體
採用與為連接器配置之資料處理常式相容的序列化格式商業物件。

收到上表中說明的訊息時,連接器會執行下列動作:

  1. 使用已配置的資料處理常式來重新建構訊息主體中的商業物件。
  2. 在靜態 Meta 資料物件中查閱為商業物件指定的協同作業名稱及動詞 (不是在動態子項 Meta 物件中,因為它無法傳送協同作業名稱)。
  3. 將商業物件同步公佈到指定的協同作業。
  4. 產生包含處理結果及任何商業物件變更或錯誤訊息的報告。
  5. 將報告傳送至要求之 replyToQueuereplyToQueueManager 欄位中指定的佇列。

下表顯示從連接器傳送回要求端之報告的結構。


MQMD 欄位 說明 受支援的值 (多重值應進行 OR 處理)
MessageType 訊息類型 REPORT
feedback 報告類型 下列其中一項:
  • MQRO_PAN 如果協同作業順利處理商業物件。
  • MQRO_NAN 如果連接器或協同作業在處理要求時發生錯誤。
訊息主體
如果協同作業順利處理商業物件,連接器會將協同作業傳回的商業物件輸入訊息主體。此預設行為可以藉由將靜態 Meta 物件中的 DoNotReportBusObj 內容設為 true 來置換。

如果無法處理要求,連接器會將連接器或協同作業產生的錯誤訊息輸入訊息主體。

回復

在起始設定時,連接器會檢查進行中佇列是否有尚未完全處理的訊息 (假設是由於連接器關閉所造成)。連接器配置內容 InDoubtEvents 可讓您指定四種選項的其中一種來處理這些訊息的復原: 啟動時失敗、重新處理、忽略、記載錯誤。

啟動時失敗

透過啟動時失敗選項,若連接器於起始設定期間發現進行中佇列含有訊息,則記載錯誤並立即關閉。使用者或系統管理者有責任查驗訊息並採取適當的動作, 不論是完全刪除這些訊息,或移至不同的佇列。

重新處理

透過重新處理選項,如果連接器在起始設定期間發現進行中佇列含有任何訊息,則會在後續的輪詢期間優先處理這些訊息。當進行中佇列內的所有訊息皆已處理完畢時,連接器就開始處理輸入佇列中的訊息。

忽略

透過忽略選項,如果連接器在起始設定期間發現進行中佇列含有任何訊息,連接器將忽略它們,但不會關閉。

記載錯誤

透過記載錯誤選項,如果連接器在起始設定期間發現進行中佇列含有任何訊息,則會記載錯誤,但不關閉。

保存

如果連接器內容 ArchiveQueue 已指定且定義有效的佇列,則連接器會將所有順利處理的訊息複本放入保存佇列中。

如果未定義 ArchiveQueue,則訊息在處理之後就會捨棄。 如需保存未訂閱或錯誤訊息的詳細資訊, 請參閱錯誤處理

註:
根據 JMS 使用慣例,擷取的訊息無法立即送到另一個佇列。 為了保存和重新遞送訊息,連接器會先產生第二個訊息,這個訊息會複製原始訊息的主體和標頭 (如果有的話)。為了避免與 JMS 服務提供者發生衝突,僅重複 JMS 必要的欄位。因此,對於要保存或重新遞送的訊息,format 欄位是唯一會複製的額外訊息內容。

Copyright IBM Corp. 1997, 2004