您可以使用 fteCreateMonitor 指令來監視佇列,並將訊息從受監視佇列傳送至檔案。 在第一個要從受監視佇列讀取的訊息中,任何 IBM® MQ 訊息內容的值都可以在作業 XML 定義中替代,並用來定義傳送行為。
關於此作業
在此範例中,來源代理程式稱為 AGENT_VENUS,其連接至 QM_VENUS。 AGENT_VENUS 所監視的佇列稱為 START_QUEUE,位於 QM_VENUS 上。 代理程式每隔 30 分鐘會輪詢佇列一次。當完整訊息群組寫入佇列時,監視器作業即會將該訊息群組傳送至眾多目的地代理程式之一(全部都連接至佇列管理程式 QM_MARS)的檔案上。 訊息群組傳送至其中的檔案名稱,由群組中第一則訊息上的 IBM MQ 訊息內容 usr.fileName 所定義。 訊息群組傳送至其中的代理程式名稱由群組中第一個訊息上的 IBM MQ 訊息內容 usr.toAgent 定義。 如果未設定 usr.toAgent 標頭,目的地代理程式將會使用預設值 AGENT_MAGENTA。
當您指定 useGroups=true
時,如果未同時指定 groupId=${GROUPID}
,則傳送只會取得佇列上的第一則訊息。 比方說,例如您使用變數替代產生 fileName,a.txt 的內容因此有可能不正確。 這是因為 fileName 是由監視器所產生,但傳送實際上取用的並不是應產生 fileName 檔案的訊息。
程序
- 建立作業 XML,以定義監視器被觸發後所執行的作業。
<?xml version="1.0" encoding="UTF-8" ?>
<request version="4.00"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
<managedTransfer>
<originator>
<hostName>reportserver.com</hostName>
<userID>USER1</userID>
</originator>
<sourceAgent agent="AGENT_VENUS" QMgr="QM_VENUS" />
<destinationAgent agent="${toAgent}" QMgr="QM_MARS" />
<transferSet>
<item mode="binary" checksumMethod="none">
<source>
<queue useGroups="true" groupId="${GROUPID}">START_QUEUE</queue>
</source>
<destination type="file" exist="overwrite">
<file>/reports/${fileName}.rpt</file>
</destination>
</item>
</transferSet>
</managedTransfer>
</request>
取代為 IBM MQ 訊息標頭值的變數會以 粗體強調顯示。 此作業 XML 會儲存至 /home/USER1/task.xml 檔。
- 建立用來監視佇列 START_QUEUE 的資源監視器。
提交下列指令:
fteCreateMonitor -ma AGENT_VENUS -mm QM_VENUS -mq START_QUEUE
-mn myMonitor -mt /home/USER1/task.xml
-tr completeGroups -pi 30 -pu minutes -dv toAgent=AGENT_MAGENTA
- 使用者或程式將訊息群組寫入佇列 START_QUEUE。
此群組中的第一則訊息具有下列
IBM MQ 訊息內容集:
usr.fileName=larmer
usr.toAgent=AGENT_VIOLET
- 在寫入完整群組時,會觸發監視器。 代理程式會將 IBM MQ 訊息內容代入作業 XML。
這會導致作業 XML 轉換成:
<?xml version="1.0" encoding="UTF-8" ?>
<request version="4.00"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
<managedTransfer>
<originator>
<hostName>reportserver.com</hostName>
<userID>USER1</userID>
</originator>
<sourceAgent agent="AGENT_VENUS" QMgr="QM_VENUS" />
<destinationAgent agent="AGENT_VIOLET" QMgr="QM_MARS" />
<transferSet>
<item mode="binary" checksumMethod="none">
<source>
<queue useGroups="true" groupId="${GROUPID}">START_QUEUE</queue>
</source>
<destination type="file" exist="overwrite">
<file>/reports/larmer.rpt</file>
</destination>
</item>
</transferSet>
</managedTransfer>
</request>
結果
即會執行作業 XML 所定義的傳送。 AGENT_VENUS 從 START_QUEUE 讀取的完整訊息群組,會寫入 AGENT_VIOLET 執行時所在系統上稱為 /reports/larmer.rpt 的檔案。
下一步
將每一個訊息傳送至個別檔案如果要監視佇列並讓每則訊息傳送至個別檔案,您可以使用與本主題中先前所述方式相似的技術。
- 依照先前說明來建立監視器,並在 fteCreateMonitor 指令上指定 -tr
completeGroups 參數。
- 在作業 XML 中指定下列內容:
<queue useGroups="true" groupId="${GROUPID}">START_QUEUE</queue>
不過,當您將訊息放入來源佇列時,請不要將它們放置在
IBM MQ 群組中。 將
IBM MQ 訊息內容新增至每一則訊息。 例如,您可以為每一個訊息指定具有唯一檔案名稱值的
usr.filename 內容。 這實際上會導致
Managed File Transfer Agent 將來源佇列上的每一則訊息視為個別群組。