在 SIBus 和 WebSphere MQ 之間進行簡單的訊息交換

CloudSpace發表於2008-08-14

引言

到目前為止,我們已經在這一文章系列中研究了 WebSphere V6 Messaging Resources 的基礎知識、如何建立企業服務匯流排 (ESB)、如何將 JMS 用作跨匯流排的訊息協議、如何開發和安裝簡單中介,以及如何通過匯流排路由從客戶機到 SOAP 提供者的 SOAP 請求。我們的總體解決方案已在下列文章中得到了發展:

現在,在第 6 部分中,我們將在 IBM WebSphere MQ 和 WebSphere V6 Message Resources 之間配置和測試傳送的訊息。

將 SIBus 連線到 MQ 的概念

不管 IBM WebSphere MQ 佇列管理器是遠端的還是與 IBM WebSphere Application Server V6 共存於同一臺計算機上,都可將其配置為使用 WebSphere V6 Message Resources(也稱為系統整合匯流排 (Systems Integration Bus) 或 SIBus)交換訊息。由於 WebSphere MQ 和 WebSphere SIBus 不共享任何模組或配置資料,因此對每一方進行配置都必須使用另一方的資訊。

SIBus 的核心元件是訊息傳遞引擎 (ME),它是與應用程式進行對話的 SIBus 元件。必須為每個匯流排至少定義一個 ME。ME 與已新增到匯流排作為匯流排成員的特定伺服器或伺服器叢集相關聯。可以以多種方式將匯流排配置為跨多個伺服器(即,它可以具有多個匯流排成員),但是在特定的匯流排中每個伺服器始終至少有一個訊息傳遞引擎。在我們的簡單設定中,我們有一個匯流排,帶有一個成員和一個訊息傳遞引擎。這樣做非常重要,其原因在於,當我們將 MQ 連線到匯流排時,該操作是通過訊息傳遞引擎元件完成的。


圖 1. 訊息傳遞引擎
圖 1. 訊息傳遞引擎

我們將使用的其他 SIBus 元件如下:

  • 外部匯流排是位於當前 SIBus 的外部的匯流排;它可以是另一個 SIBus 或 MQ 佇列管理器。
  • 外部目的地是一種設計用來將訊息傳送到外部匯流排的目的地。

常規的佇列目的地可配置為從外部匯流排接收訊息。

MQ 佇列管理器對於 SIBus 好像是一個外部匯流排。訊息傳遞引擎對於 WebSphere MQ 好像是另一個佇列管理器。在 SIBus 端,ME 和佇列管理器之間的連線是通過 SIBus 的 MQLink 元件建立的。MQLink 在 MQ 和 SIBus 使用的格式和協議之間進行轉換。一個特定的 MQ 佇列管理器僅有一個 SIBus MQLink。在 MQ 端,MQ 通道定義為與特定的 SIBus 訊息傳遞引擎進行通訊。

有關這些匯流排元件的詳細資訊,請參見 WebSphere Application Server V6 Information Center


圖 2. SIBus 元件
圖 2. SIBus 元件 

在 SIBus 和 WebSphere MQ 之間傳送訊息

為了使您能概括地瞭解這一部分所涉及的內容,下面總結了在 SIBus (TheBus) 和 WebSphere MQ 之間傳遞訊息的主要任務。我們將在隨後部分中對每一組任務進行詳細介紹。

連線 SIBus 和 MQ 佇列管理器

  1. 在 WebSphere Application Server 中建立指向 MQ 佇列管理器的外部匯流排。

  2. 在 WebSphere Application Server 中建立從 TheBus 到 MQ 佇列管理器的 MQ 連結。

  3. 在 WebSphere MQ 中建立連結到 TheBus 的傳輸佇列(好像另一個 MQ 佇列管理器)。

  4. 在 WebSphere MQ 中定義傳送方和接收方通道。

WebSphere Application Server 和 WebSphere MQ 中的這些定義使用公共的 TCP/IP 主機名和埠建立通訊。

將訊息從 SIBusTo 傳送到 WebSphere MQ

  1. 在 WebSphere Application Server 中建立指向 MQ 佇列的外部目的地。

  2. 將訊息傳送到外部目的地。對於我們的測試,我們將使用第 3 部分的 JMS 客戶機將訊息傳送到一個目的地,然後再轉發到外部目的地。

  3. 訊息是通過匯流排傳送到 MQ 佇列的。我們將使用 rfhutil 實用工具來檢視 MQ 佇列上的訊息。

將訊息從 WebSphere MQ 傳送到 SIBus

  1. 在 WebSphere Application Server 中建立佇列目的地。

  2. 在 WebSphere MQ 中,建立引用 TheBus 上的目的地的遠端佇列。

  3. 使用 rfhutil 或另一個程式將訊息放入 MQ 遠端佇列中。

  4. 通過 WebSphere MQ 將訊息傳送到匯流排上的目的地。對於我們的測試,我們將使用記錄中介檢視訊息是否已傳遞到目的地。

配置 SIBus 以與 WebSphere MQ 進行通訊

在 SIBus 中,我們將建立外部匯流排和 MQ 連結以與 WebSphere MQ 進行通訊。

建立外部匯流排

  1. 開啟 WebSphere Application Server 管理控制檯(伺服器必須在執行)。

  2. 在左側的導航窗格中,選擇 Service Integration => Buses

  3. 選擇 TheBus

  4. 在下一個視窗中,選擇 Foreign Buses (圖 3)。


    圖 3. 匯流排屬性
    圖 3. 匯流排屬性
  5. 選擇 New。

  6. 步驟 1:外部匯流排屬性。提供了一個名稱(是用於 SIBus 中的外部匯流排的識別符號):TheForeignBus(圖 4)。


    圖 4. 步驟 1:外部匯流排屬性
    圖 4. 步驟 1:外部匯流排屬性
  7. 步驟 2:路由定義型別。對於路由定義型別,請選擇 Direct, WebSphere MQ link(圖 5)。


    圖 5. 步驟 2:路由定義型別
    圖 5. 步驟 2:路由定義型別
  8. 由於步驟 3 對使用者 ID 沒有要求,因此選擇 Next

  9. 分別單擊 Finish Save

  10. 現在您將在 TheBus 的外部匯流排列表中看到 TheForeignBus(圖 6)。


    圖 6. 外部匯流排列表
    圖 6. 外部匯流排列表

建立 WebSphere MQ 連結

接下來,我們需要設定從 SIBus 到 WebSphere MQ 的連結,包括將 SIBus 標識為 WebSphere MQ 的佇列管理器。然後,我們需要配置與佇列管理器中的通道相匹配的的傳送和接收通道。

  1. 在管理控制檯左側的導航窗格中,選擇 Service Integration => Buses => TheBus

  2. 在下一個窗格中,選擇 Messaging engines(圖 7)。


    圖 7. 匯流排屬性
    圖 7. 匯流排屬性
  3. 選擇 Node1.server1-TheBus

  4. 在下一個皮膚的右側,選擇 WebSphere MQ links(圖 8)。


    圖 8. 訊息傳遞引擎配置
    圖 8. 訊息傳遞引擎配置
  5. 選擇 New

  6. 步驟 1:通用 WebSphere MQ 連結屬性。輸入或選擇下列值(圖 9):

    • Name(僅用於 SIBus):LocalMQLink
    • Foreign bus name:TheForeignBus(它是我們在上一步中建立的,將可能是僅有的一個外部匯流排名稱)
    • Queue manager name:QM_TheBus(通過此名稱——而非 MQ 佇列管理器的名稱——您希望訊息傳遞引擎為 MQ 佇列管理器所知)

    選擇 Next


    圖 9. 通用 WebSphere MQ 連結屬性
    圖 9. 通用 WebSphere MQ 連結屬性
  7. 步驟 2:傳送方通道 WebSphere MQ 連結屬性。傳送方通道和接收方通道成對地起作用。該通道將成為用於將訊息從匯流排傳送到 WebSphere MQ 的連線。它需要與佇列管理器所使用的名稱、主機名和埠相匹配,以接收來自匯流排的訊息。預設情況下,佇列管理器使用埠 1414 接收傳入的訊息。輸入或選擇下列值(圖 10):

    • Sender MQ channel name:busToMQ(這可以是任意選擇的名稱,但它必須與 MQ 佇列管理器中的接收方通道名稱相匹配。)
    • Host name(屬於佇列管理器):localhost
    • Port(顯示佇列管理器的預設埠):1414
    • Transport chain:OutboundBasicMQLink

    選擇 Next


    圖 10. 步驟 2:傳送方通道 WebSphere MQ 連結屬性
    圖 10. 步驟 2:傳送方通道 WebSphere MQ 連結屬性
  8. 步驟 3:接收方通道 WebSphere MQ 連結屬性。該通道將成為用於從 WebSphere MQ 到匯流排接收訊息的連線。它必須與佇列管理器所使用的名稱、主機名和埠相匹配,以將訊息傳送到匯流排。預設情況下,SIBus 使用用於嵌入訊息傳遞的埠 5558 (通用 WebSphere 設定的一部分)接收傳入的訊息。輸入或選擇下列值(圖 11):

    • Receiver MQ channel name:MQToBus(這可以是任意選擇的名稱,但它必須與佇列管理器中的傳送方通道名稱相匹配。)
    • 不需要定義主機名和埠,因為 WebSphere 嵌入訊息傳遞配置用於接收訊息;即,預設情況下,它使用應用程式伺服器的主機名和埠 5558。
    • 選擇 Next

    圖 11. 步驟 3:接收方通道 WebSphere MQ 連結屬性
    圖 11. 步驟 3:接收方通道 WebSphere MQ 連結屬性
  9. 步驟 4:WebSphere MQ 連結屬性小結。完成並儲存更改。

  10. 重新啟動伺服器以使新的連結在外部可用。

配置佇列管理器以與 SIBus 進行通訊

WebSphere MQ 的示例螢幕快照來自 Windows® 平臺。雖然皮膚的外觀將隨平臺的變化而有所變化,但所輸入的資訊將是相同的。

從本質上而言,配置 MQ 佇列管理器以與 SIBus 進行通訊的過程,與配置兩個 MQ 佇列管理器以進行相互通訊的過程相同。如果執行 WebSphere MQ 的預設安裝,那麼您就具有名為 QM_machine 的佇列管理器;這是我們將使用的佇列管理器。在我們的示例中,我們將使用名為 QM_reinitz 的佇列管理器。

  1. 開啟 WebSphere MQ Explorer,導航到 Start menu => Programs => IBM WebSphere MQ => WebSphere MQ Explorer

建立傳輸佇列

建立傳輸佇列,以提供帶有指向 SIBus 的連結的 QM_reinitz 佇列管理器作為佇列管理器。

  1. 展開 WebSphere MQ => QM_reinitz


    圖 12. 建立新佇列
    圖 12. 建立新佇列
  2. 右鍵單擊 Queues,然後選擇 New => Local Queue

  3. 在 Local Queue 對話方塊中(圖 13),選擇 General 選項卡。

  4. 輸入或選擇以下值:

    • Queue Name:QM_TheBus(必須是在 MQ 連結定義中使用的佇列管理器名稱)
    • Usage:Transmission

    選擇 OK


    圖 13. 建立 Local Queue 對話方塊
    圖 13. 建立 Local Queue 對話方塊

    現在,您可以在佇列的列表下看到 QM_TheBus(圖 14)。


    圖 14. 佇列列表
    圖 14. 佇列列表

定義傳送方通道

  1. 展開 QM_reinitz => Advanced

  2. 右鍵單擊 Channels,然後選擇 New => Sender channel

  3. Create Sender Channel 對話方塊中,選擇 General 選項卡(圖 15)

  4. 輸入或選擇下列值:

    • Channel Name:MQToBus(該名稱必須是在定義 MQ 連結上的接收方佇列時所使用的正確名稱)
    • Transmission Protocol:TCP/IP
    • Connection Name:執行 SIBus(埠)的計算機的主機名。對於預設的獨立的 WebSphere Application Server 安裝,該值為 localhost(5558)。
    • Transmission Queue:QM_TheBus

    選擇 OK


    圖 15. 建立 Sender Channel 對話方塊
    圖 15. 建立 Sender Channel 對話方塊
  5. 展開 Explorer 通道視窗以顯示 MQToBus 通道的狀態;它最有可能是不活動狀態。右鍵單擊新建立的 MQToBus 通道,然後選擇 Start

  6. 大約一分鐘後,從上下文選單中選擇 Refresh。您應該看到狀態更改為 Running(圖 16)。


    圖 16. 檢查通道狀態
    圖 16. 檢查通道狀態

定義接收方通道

  1. 右鍵單擊 Channels,然後選擇 New => Receiver Channel

  2. 在 Create Receiver Channel 對話方塊中,選擇 General 選項卡(圖 17)。

  3. 輸入或選擇以下值:

    • Channel Name:busToMQ(該名稱必須是在定義 MQ 連結上的傳送方佇列時所使用的正確名稱)
    • Transmission Protocol:TCP/IP

    對於接收,不需要連線名稱和傳輸佇列;預設情況下使用連線名稱和傳輸佇列。


    圖 17. 建立 Receiver Channel 對話方塊
    圖 17. 建立 Receiver Channel 對話方塊

不需要啟動接收方通道 busToMQ;當將請求接收到接收方通道時,會自動啟動它。您將看到定義在 WebSphere MQ 中的兩個通道,如圖 18 所示。


圖 18. WebSphere MQ 佇列
圖 18. WebSphere MQ 佇列

現在,我們已經完成了將 TheBus 連線到 WebSphere MQ 的步驟。接下來,我們將逐步研究如何將訊息從 WebSphere MQ 傳送到 SIBus。


訊息傳遞測試實用工具

可以採用幾種方式將訊息放入 WebSphere MQ 並從中讀取訊息以進行測試。我們特別喜歡的一種方式是將前面提到的免費實用工具 rfhutil 用作 WebSphere MQ 支援包。可以從 IBM Software Support 頁面下載這一工具。只需解壓縮下載的 ZIP 檔案並執行 rfhutil.exe 即可。在本文的所有剩餘部分中,我們將使用此實用工具來檢視和刪除佇列中的訊息,並且將訊息放入 WebSphere MQ 佇列。由於我們需要檢視目的地在測試的過程中接收到的訊息,因此我們將把記錄中介(請參見側欄)分配給需要監視的目的地。

將訊息從 SIBus 傳送到 WebSphere MQ

在這一文章系列的第 3 部分中,我們實現了一個簡單的 JMS 客戶機將包傳遞確認訊息傳送到目的地。由訊息驅動的 Bean (MDB) 讀取此訊息,然後對此訊息進行處理。作為 Posts-R-Us ESB 策略的一部分,企業現在正在改變將傳輸確認傳遞到其 CICS 後端系統的方式:它們將不使用在生產系統中對 CICS 進行 JCA 呼叫的 MDB,而是使用用於與 CICS 進行來回通訊的 WebSphere MQ。

我們將修改第 3 部分的配置,以便它現在將訊息轉發到 WebSphere MQ。

  1. 如果您已經具有第 3 部分中 JMS 示例的設定,那麼需要禁用 MDB 以阻止讀取傳送到匯流排的訊息。可以通過更改 MDB 的 activationSpec,或停止 EAR 檔案來完成這一操作。如果不具有 JMS 設定,則遵循第 3 部分中的步驟 1 到步驟 12 設定目的地;由於我們不準備使用 MDB,因此不需要 activationSpec。對於要將訊息傳送到目的地的 JMS 客戶機而言,您的設定需要包含 PackageReceivedDestination 和 JMS 實體。

  2. (可選)為了最大化程式的可見性,並有助於除錯,請遵循第 4 部分中的指導安裝 LoggingMediationRevised(而非 LoggingMediation),並將 LoggingMediationRevised 分配給 PackageReceivedDestination。

  3. (可選)遵循任何一篇文章(第 3 部分或第 4 部分)中的指導,使 JMS 客戶機將訊息傳送到目的地,並確認是否在 SystemOut.log 中記錄了此訊息。

在 WebSphere MQ 中建立佇列以接收來自匯流排的訊息

我們需要在 WebSphere MQ 中建立佇列來接收來自匯流排的訊息。在生產環境中,後端系統接著將讀取此佇列的訊息。在我們的測試環境中,我們將使用 rfhutil 實用工具讀取訊息。

  1. 在 WebSphere MQ Explorer 中,導航到 WebSphere MQ => QM_reinitz => Queues

  2. 右鍵單擊 Queues,然後選擇 New => Local Queue

  3. 在 Create Local Queue 對話方塊中,選擇 General 選項卡(圖 19)。

  4. 對於 Queue Name,輸入 DeliveryConfirmationQueue,然後選擇 OK


圖 19. 建立 Local Queue 對話方塊
圖 19. 建立 Local Queue 對話方塊

您應該看到下列佇列目的地:


圖 20. 佇列目的地
圖 20. 佇列目的地

建立外部目的地以將訊息從匯流排傳送到 WebSphere MQ

在匯流排中,我們需要建立外部目的地,它在 WebSphere MQ 中是一個虛擬地址。因為外部目的地在 WebSphere MQ 中表示一個端點,所以不能對其附加中介。

  1. 在 WebSphere Application Server 管理控制檯中,選擇 Buses => TheBus => Destinations

  2. 選擇 New

  3. 選擇 Foreign

  4. 選擇 Next

  5. 步驟 1:設定外部目的地屬性。輸入或選擇下列值(圖 21):

    • Identifier:DeliveryConfirmationQueue@QM_reinitz(WebSphere MQ 中的佇列)
    • Bus:TheForeignBus(訊息所傳送到的匯流排)

    選擇 Next


    圖 21. 步驟 1:設定外部目的地屬性
    圖 21. 步驟 1:設定外部目的地屬性
  6. 步驟 2:確認外部目的地的建立。選擇 Finish,然後選擇 Save。您應該具有如圖 22 所示的目的地。


    圖 22. 目的地列表
    圖 22. 目的地列表

完成路由和測試

現在,我們需要從第 3 部分中的目的地(JMS 客戶機呼叫此目的地)和我們剛才建立的外部目的地進行路由。

  1. 從目的地列表(圖 22)中選擇 PackageReceivedDestination。

  2. 設定 Default 將路由路徑轉發到 TheForeignBus: DeliveryConfirmationQueue@QM_reinitz

  3. 分別選擇 OKSave

  4. 重新啟動伺服器。現在,我們準備測試從 JMS 客戶機到 WebSphere MQ 的訊息傳遞。

  5. 執行命令提示符中的 JMS 客戶機:
    launchclient packagedReceivedClient.ear

  6. (可選)檢查 SystemOut.log 檔案以從 PackageReceivedDestination 上的記錄中介輸出。

  7. 執行 rfhutil.exe

  8. 選擇佇列管理器 QM_reinitz

  9. 選擇佇列 DeliveryConfirmationQueue

  10. 選擇 Read Q

  11. 您應該看到如圖 23 所示的佇列上的訊息。


    圖 23. 傳遞確認
    圖 23. 傳遞確認

您也可以檢查 SystemOut.log 檔案來檢視 PackageReceivedDestination 上的記錄中介的輸出:

SystemOut  O Message logged. The payload of the message is Package Received - 24595023

將訊息從 WebSphere MQ 傳送到 SIBus

在本系列的第 5 部分中,我們建立了一個包(跟蹤在 ESB 上可用的 Web 服務)來支援各種要求跟蹤資料的包的客戶機應用程式。所需的一種訪問是通過 WebSphere MQ。在本示例中,發出請求的系統不支援 SOAP,因此,它將通過 WebSphere MQ 將 SOAP 訊息的 XML 主體傳送到匯流排。(在本系列以後的文章中,我們將介紹如何將這種 XML 訊息轉換為 SOAP 訊息。)目前,我們將重點放在從匯流排上的 WebSphere MQ 獲取訊息。

建立匯流排目的地以從 WebSphere MQ 接收訊息

我們需要建立匯流排目的地來接收放在 WebSphere MQ 中的遠端佇列中的訊息。該目的地將成為常規佇列目的地。

  1. 從 WebSphere 管理控制檯中,選擇 Buses => TheBus => Destinations

  2. 選擇 New

  3. 選擇 Queue

  4. 選擇 Next

  5. 步驟 1:設定佇列屬性。對於 Identifier,選擇 PackageTrackingFromMqDestination,然後選擇 Next

  6. 步驟 2:將佇列分配給匯流排成員。選擇 node1:server1,然後選擇 Next

  7. 步驟 3:確認佇列的建立。選擇 Finish

  8. 要知道訊息是否到達匯流排上的目的地,請遵循第 4 部分中的指導安裝 LoggingMediationRevised(而非 LoggingMediation),然後將其分配給 PackageTrackingFromMqDestination

  9. 儲存。

您應該具有圖 24 中所列出的目的地。(如果在同一臺伺服器上具有第 3 部分或第 5 部分中的設定,那麼將會看到所列出的其他目的地。)


圖 24. 目的地列表
圖 24. 目的地列表

建立遠端佇列以將訊息從 WebSphere MQ 傳送到匯流排

  1. 在 WebSphere MQ Explorer 中,展開 WebSphere MQ => QM_reinitz => Queues

  2. 右鍵單擊 Queues,然後選擇 New => Remote Queue Definition

  3. 在 Create Remote Queue Definition 對話方塊中,選擇 General 選項卡(圖 25)。

  4. 輸入或選擇下列值:

    • Queue Name(本地 WMQ Queue Manager):PackageTrackingRequestRemoteQueue
    • Remote Queue Name(WebSphere Application Server 中的佇列目的地):PackageTrackingFromMqDestination
    • Remote Queue Manager Name:QM_TheBus(WebSphere MQ 將匯流排稱為此名稱;當建立 MQ 連結時指定此名稱)
    • Transmission Queue Name:QM_TheBus(在建立傳送方通道以便將訊息從 MQ 傳送到匯流排時,您建立了一個傳輸佇列;這裡,傳輸佇列的名稱恰好與遠端佇列管理器的名稱相同。)

    選擇 OK


圖 25. Create Remote Queue Definition 對話方塊
圖 25. Create Remote Queue Definition 對話方塊

建立佇列之後,將看到圖 26 所示的列表。


圖 26. 佇列列表
圖 26. 佇列列表

使用遠端佇列測試將訊息從 WebSphere MQ 傳送到匯流排

當測試將訊息傳送到 SIBus 時,您可能需要採用一種方式刪除匯流排中的訊息。導航到 Buses => TheBus => Destinations => PackageTrackingFromMqDestination => Queue Points => node1.server1-TheBus => Messages。您可以看到傳送到目的地的訊息的詳細情況,您還可以刪除單個或所有訊息。這是使用 LoggingMediationRevised 檢視從 WebSphere MQ 傳送的訊息的一種可供選擇的方式。

我們的示例應用程式(包含請求特定 trackingNumber 的包狀態所需的程式碼)包含了 XML 檔案。我們將使用檔案 track123.xml 來測試將訊息從 WebSphere MQ 傳送到匯流排目的地。

請記住:WebSphere MQ 中的 MQToBus 通道必須在執行。如果重新啟動計算機、WebSphere MQ 或 WebSphere Application Server,就可能得重新啟動通道。因此通道應該處於執行狀態。

要將訊息放入遠端 WebSphere MQ 佇列 PackageTrackingRequestRemoteQueue 中,我們將使用 rfhutil:

  1. 執行 rfhutil.exe

  2. 選擇 Main 選項卡(圖 27)。


    圖 27. 執行 rfhutil 實用工具,Main 選項卡
    圖 27. 執行 rfhutil 實用工具,Main 選項卡
  3. 輸入或選擇下列值:

    • Queue Manager Name:QM_reinitz
    • Queue Name:PackageTrackingRequestRemoteQueue

    選擇 Read File 以載入 track123.xml 的內容。

  4. 要檢視檔案的內容,請選擇 Data 選項卡(圖 28),然後選擇 XML 作為資料格式。


    圖 28. 執行 rfhutil 實用工具,資料選項卡
    圖 28. 執行 rfhutil 實用工具,資料選項卡
  5. 返回到“Main”選項卡(圖 27),然後選擇 Write Q

  6. 在 WebSphere Application Server Systemout.log 檔案中,您應該看到來自 LoggingMediationRevised 中介的輸出:

    SystemOut     O Message logged. The payload of the message is 
    
             123
    
    

結束語

在這一文章系列的第 6 部分中,我們描述了 WebSphere Application Server V6 Message Resources 中對使用 WebSphere MQ 交換訊息的支援。我們一步一步演示瞭如何設定 SIBus 和 WebSphere MQ 之間的連線性、如何測試將訊息從 MQ 傳送到 SIBus,以及如何測試將訊息從 SIBus 傳送到 MQ。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-426901/,如需轉載,請註明出處,否則將追究法律責任。

相關文章