訓練
模組
在 .NET Aspire 專案中使用 RabbitMQ 傳送訊息 - Training
在本課程模組中,您將了解 RabbitMQ 訊息代理程式以及如何使用他來分離微服務,同時確保微服務能夠可靠地進行通訊。 您也將了解 .NET Aspire 如何輕鬆地與 RabbitMQ 整合。
大型訊息至 MSMQ 範例示範如何使用由 MQRTLarge.dll 實作的 MQSendLargeMessage API,從消息 (佇列傳送大於 4 MB (MB) 的 .xml 檔至 BizTalk MSM) Q 配接器。
範例的運作方式如下:
使用者會使用 SendLargeMessage.exe 將大型 .xml 檔案傳送至本機電腦上的佇列。
BizTalk Server會從佇列接收大型 .xml 檔案,並將它複製到本機目錄。
訊息佇列中的許多作業都是非同步。 也就是說,許多 MSMQ API 呼叫 (例如 ,MQSendLargeMessage) 在要求作業完成之前返回呼叫端。
MSMQ 提供一項機制,會在作業全部完成之後將回應傳遞至應用程式。 此機制牽涉到使用「管理員佇列」。MSMQ 會以管理員佇列中的訊息形式傳回意見反應。 當進行原始 MSMQ API 呼叫時,便會指定 MSMQ 要將回應傳送所至的管理佇列。 例如,使用MQSendLargeMessage API 傳送訊息時,應用程式可以使用在呼叫MQSendLargeMessage的訊息上使用PROPID_M_ADMIN_QUEUE訊息屬性來指定管理員佇列的名稱。 即使應用程式可能會在MQSendLargeMessage呼叫上取得成功的傳回碼,但如果訊息傳送作業後續失敗,MSMQ 仍會將訊息寫入至該效果的指定管理員佇列。
如果應用程式未指定管理佇列,傳送失敗將會導致訊息遺失而無法擷取診斷資訊,訊息將會毫無跡象地消失。 MSMQ 中的許多錯誤情況可能會導致這種情況發生,例如,執行非交易式傳送至交易式佇列。
在此範例的內容中,程式碼務必在 MQSendLargeMessage 的呼叫中指定交易類型,這與訊息傳送至佇列的交易支援一致。 如果未完成,而且未指定任何管理員佇列 (,如同此範例) 的情況,MSMQ 會捨棄傳送的訊息,但未指出已傳送的訊息 (,否則不會傳回任何錯誤碼給應用程式、未寫入事件記錄檔的診斷,依此類) 。
<範例 Path > \AdaptersUsage\MSMQLarge
注意
如果使用 64 位版本的 Windows 和 BizTalk Server,範例將會安裝在C:\Program Files (x86) \Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge資料夾中。 請使用 C:\Program Files 資料夾,記下本檔中任何其他指示的這項變更。
下表顯示此範例中的檔案,並描述其用途。
檔案 | 說明 |
---|---|
MQRTLarge.dll | 提供原生訊息佇列的附加元件。 公開 MQSendLargeMessage 和 MQReceiveLargeMessage API。 您必須在 64 位版本的 Windows 上安裝BizTalk Server,才能存取 64 位版本的 MQRTLarge.dll。 對於不含BizTalk Server的 MSMQ 解決方案,MQRTLarge.dll 仍可正常運作。 不過,這不是 Microsoft 支援的建議設定,如果BizTalk Server環境外部使用,可能會發生非預期的結果。 |
LargeMessages.sln | 提供 Visual Studio 解決方案以建立範例中使用的 SendLargeMessage 可執行檔。 |
XMLCreator.sln | 提供 Visual Studio 解決方案來建立 XMLCreator 可執行檔,以產生 SDK 範例的測試 .xml 檔案。 |
確定已安裝 Visual Studio、Microsoft Message Queuing 和 BizTalk Server。
在 Visual Studio 中,開啟C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\LargeMessages.sln方案檔。 建置範例。
建立C:\Demo目錄,其中BizTalk Server會從 MSMQ 放置訊息。
開啟 BizTalk Server 管理主控台。
建立範例的傳送埠以寫入訊息。
在 [ 靜態 One-Way 傳送埠屬性 ] 對話方塊中,將埠的名稱設定為 MySendPort。
將傳輸類型設定為 [檔案]。
按一下 [ 設定] 按鈕以開啟 [ 檔案傳輸屬性] 表單。 在目的地資料夾中輸入C:\Demo。 確定主機實例身分識別可以存取 C:\Demo 資料夾。
確定 [檔案名 ] 設定為 %MessageID%.xml。 按一下 [確定]。
按一下 [篩選] 。
將 屬性 設定為 BTS。ReceivePortName。
將 [運算子] 設定為 =。
將 [值 ] 設定為 MyReceivePort。
按一下 [確定]。
建立接收埠以接受來自 MSMQ 的訊息。
在 BizTalk Server 管理主控台中,以滑鼠右鍵按一下 [接收埠]。
按一下 [新增],然後按一下 [單向接收埠]。
在 [ 接收埠屬性 ] 對話方塊中,將埠的名稱設定為 MyReceivePort,然後按一下 [ 確定]。
建立範例的接收埠之後,您必須建立一個接收位置。
在 BizTalk Server 管理主控台中,以滑鼠右鍵按一下 [接收位置]。
按一下 [新增],然後按一下 [單向接收位置]。
將接收位置的名稱設定為 MSMQReceiveLocation。
在 [ 選取接收埠 ] 對話方塊中,選取 [MyReceivePort]。
在 [ 接收位置屬性 ] 對話方塊中,將 [傳輸類型 ] 設定為 MSMQ。
在 [ 位址 (URI) ] 區段中,按一下 [ 設定 ] 以開啟 MSMQ 傳輸屬性 表單。 將 [佇列 ] 設定為 localhost\private$\test。
將 [交易式] 設定為 True
,然後按一下 [ 確定]。
您必須讓埠和接收位置可供透過 BizTalk Server 管理主控台使用。
以滑鼠右鍵按一下 [MySendPort],然後按一下 [ 登記]。
以滑鼠右鍵按一下 [MySendPort],然後按一下 [ 開始]。
以滑鼠右鍵按一下 [MSMQReceiveLocation],然後按一下 [ 啟用]。
按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。
展開 [ 功能] 節點。
展開 [訊息佇列] 節點。
以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。
在 [佇列名稱] 下,輸入 test。 確定已選取 [ 交易式 ] 核取方塊。
按一下 [確定]。
按一下 [開始],以滑鼠右鍵按一下 [ 電腦],然後按一下 [ 管理]。
展開 [服務和應用程式],然後展開 [訊息佇列] 節點。
注意
如果電腦未安裝訊息佇列,請移至[主控台 > 程式 > 及功能],然後選取 [開啟或關閉 Windows 功能]。 檢查 Microsoft Message Queue (MSMQ) Server下的所有功能,然後按一下 [ 確定]。
以滑鼠右鍵按一下 [私人佇列] 節點,按一下 [ 新增],然後按一下 [ 私人佇列]。
在 [佇列名稱] 下,輸入 test。 確定已選取 [ 交易式 ] 核取方塊。
按一下 [確定]。
在 Visual Studio 中,開啟解決方案C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\XMLCreator\XMLCreator.sln。
建置並執行專案。
在 [XML 本文] 底下,輸入 這是測試訊息。
在 複製 XML 本文的次數下,輸入 250000
。
在 [XML 檔案位置]下,輸入 C:\Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersUsage\MSMQLarge\LargeFile.xml
。
按一下 [建立 XML],然後按一下 [ 確定]。
開啟命令提示字元,並將目錄變更為C:\Program Files\Microsoft BizTalk Server < version > \SDK\Samples\AdaptersUsage\MSMQLarge\SendLargeMessage\bin\debug。
在命令提示字元中,執行 SendLargeMessage.exe。 SendLargeMessage 可執行檔接受兩個變數:第一個變數是 MSMQ 佇列的位置,而第二個則是要傳送之 .xml 檔案的位置:
DIRECT=OS:localhost\private$\Test "C:\Program Files\Microsoft BizTalk Server <version>\SDK\Samples\AdaptersUsage\MSMQLarge\LargeFile.xml"
確認在C:\Demo目錄中的BizTalk Server電腦上已建立大小相同的檔案。 這是您在 MySendPort 傳送埠中找到的目錄。
SendLargeMessage.exe 參考 LargeMessages API,接著會參考 BizTalk 訊息佇列大型訊息延伸模組 (MQRTLarge.dll) API。 訊息佇列大型訊息延伸模組 API 是原生訊息佇列的附加元件,可處理大於原生訊息佇列 4 MB 限制的訊息。
此範例會使用MQSendLargeMessage API,並使用LargeMessages API 向.NET Framework公開 API。
訓練
模組
在 .NET Aspire 專案中使用 RabbitMQ 傳送訊息 - Training
在本課程模組中,您將了解 RabbitMQ 訊息代理程式以及如何使用他來分離微服務,同時確保微服務能夠可靠地進行通訊。 您也將了解 .NET Aspire 如何輕鬆地與 RabbitMQ 整合。