跳至頁尾內容
.NET 幫助

Azure.Messaging.ServiceBus 範例 C#(工作原理)

在當今互聯互通的數位環境中,高效溝通是企業成功的基石。 無論是應用程式之間傳輸關鍵數據,還是確保分散式系統之間的即時更新,可靠的訊息傳遞基礎設施都是必不可少的。

Azure 服務總線是一種基於雲端的訊息服務,它為開發人員提供了一個強大的解決方案,使他們能夠建立可擴展、解耦且具有彈性的應用程式。 讓我們深入了解 Azure 服務總線,了解其重要性並探索其眾多功能。 本文稍後也將介紹如何使用IronPDF來管理、產生和讀取 PDF 文件。

了解 Azure 服務總線

Azure 服務總線是一個完全託管的企業整合訊息代理,可促進應用程式和服務之間的可靠通信,無論它們是在雲端、本地還是混合環境中運行。

它提供靈活的訊息傳遞功能,包括隊列和發布/訂閱機制,以實現分散式系統中不同組件之間的無縫通訊。 此外,它還支援批量訊息,允許發送多個訊息而不會超過總大小限制。

Azure 服務總線有以下優點:

1.解耦應用程式:服務總線允許您將應用程式和服務彼此分開。 這種解耦增強了可靠性和可擴展性。 2.負載平衡:它在相互競爭的工人之間平衡工作,確保高效率的資源利用。 3.訊息傳輸:資料透過訊息在應用程式和服務之間傳輸。 這些訊息的訊息體可以包含各種類型的數據,例如 JSON、XML 或純文字。 4.訊息傳遞場景:常見場景包括傳輸業務資料(例如銷售訂單)、負載平衡以及使用主題和訂閱建立發布者和訂閱者之間的關係。 5.事務:服務總線支援原子事務,允許在單一事務範圍內執行多個操作。 事務處理會有多個並發調用,而訊息批次只會有一個調用。 6.訊息會話:它有助於大規模協調工作流程和有序的訊息傳輸。

主要特性和功能

1.佇列和主題: Azure 服務匯流排提供佇列和主題作為通訊通道。 佇列支援點對點通信,確保每個訊息只由一個接收者處理,因此非常適合工作負載分配和負載平衡場景。 另一方面,主題支援發布/訂閱訊息模式,允許多個訂閱者獨立接收相關訊息,並促進可擴展的事件驅動架構。

2.可靠的訊息傳遞:借助 Azure 服務總線,訊息傳遞本身就具有可靠性。 它確保訊息持久性,可以配置訊息和錯誤處理程序、容錯性以及至少一次的傳遞語義,從而最大限度地降低資料遺失或重複的風險。 此外,它還支援事務,能夠跨多個訊息進行原子操作,從而確保資料完整性。

3.死信和重試策略:為了有效處理錯誤訊息,Azure 服務總線提供了死信功能,允許將問題訊息自動移至單獨的佇列進行分析和故障排除。 此外,它還提供了靈活的重試策略,使開發人員能夠配置具有指數退避策略的自動重試,從而增強應用程式在面對瞬態故障時的復原能力。

4.分區與擴充: Azure 服務匯流排支援對訊息實體進行分割區,以將工作負載分散到多個節點上,從而確保水平擴充性和高吞吐量。 這項功能對於處理大量訊息和適應波動的工作負載至關重要,同時不會影響效能或可靠性。

5.與 Azure 生態系統整合: Azure 服務總線可與其他 Azure 服務(如 Azure Functions、邏輯應用、事件網格和 Azure Kubernetes 服務 (AKS))無縫集成,使開發人員能夠輕鬆建立端到端解決方案。 無論是回應傳入訊息觸發無伺服器函數,還是使用邏輯應用程式協調複雜的工作流程,Azure 服務總線都是建立強大、事件驅動架構的關鍵所在。

IronPDF簡介

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 1

IronPDF是一個功能強大的 C# PDF 庫,可讓您在 .NET 專案中產生、編輯和提取 PDF 文件中的內容。 以下是一些主要特點:

  1. HTML 轉 PDF:

    • 將 HTML、CSS 和 JavaScript 內容轉換為 PDF 格式。

    • 使用 Chrome 渲染引擎,可產生像素級完美的 PDF 檔案。

    • 從 URL、HTML 檔案或 HTML 字串產生 PDF。

2.圖片和內容轉換:

* 將影像轉換為 PDF 格式,反之亦然。

* 從現有 PDF 文件中提取文字和圖像。

* 支援多種影像格式。

3.編輯和篡改:

* 設定 PDF 的屬性、安全性和權限。

* 新增數位簽章。

* 編輯元資料和修訂歷史。

4.跨平台支援:

* 可與 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)和 .NET Framework(4.6.2+)搭配使用。

* 相容於 Windows、Linux 和 macOS。

* 可透過 NuGet 輕鬆安裝。

使用 IronPDF 和 Azure.Messaging.ServiceBus 產生 PDF 文件

首先,使用 Visual Studio 建立一個控制台應用程式,如下所示。

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 2

請提供項目名稱

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 3

提供 .NET 版本

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 4

安裝IronPDF 軟體包

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 5

建立 Azure 服務總線

在 Azure 中建立一個具有唯一名稱的命名空間。 命名空間是應用程式中服務總線資源(例如佇列和主題)的容器。

以下是如何建立命名空間:

  1. 登入 Azure 入口網站。
  2. 前往"所有服務"頁面。
  3. 在左側導覽窗格中,從類別清單中選擇"整合"。
  4. 將滑鼠停留在"服務總線"上,然後按一下服務總線圖塊上的"+"按鈕。

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 6

若要設定"建立命名空間"頁面上的"基本資訊"選項卡,請依照下列步驟操作:

1.訂閱:選擇要建立命名空間的 Azure 訂閱。 2.資源組:選擇命名空間所在的現有資源組,或建立新的資源組。

3.命名空間名稱:輸入命名空間的名稱。 請確保名稱符合以下條件:

* 必須在 Azure 中是唯一的。

* 長度必須介於 6 到 50 個字元之間。

* 只能包含字母、數字和連字號"-"。

* 必須以字母開頭,並以字母或數字結尾。

* 不能以"-sb"或"-mgmt"結尾。

4.位置:選擇您的命名空間應託管的區域。 5.定價層級:選擇命名空間的定價層級(基本、標準或進階)。 在這個例子中,選擇"標準"。

  1. 選擇頁面底部的"審閱+建立"

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 7

  1. "審核+建立"頁面上選擇"建立"。

  2. 資源部署成功後,前往該資源

現在您看到的是服務總線命名空間的首頁。

在 Azure 入口網站中建立服務總線佇列

若要在服務總線命名空間中設定佇列,請依照下列步驟操作: 1.導覽至佇列:前往 Azure 入口網站中的服務總線命名空間頁面。 從左側導覽選單中選擇"隊列"。 2.建立新佇列:在佇列頁面上,按一下工具列上的"+ 佇列"按鈕。 3.配置佇列:在提供的欄位中輸入佇列名稱。 其他設定保持預設值。 建立 Azure 服務總線佇列時需要配置的選項:

1.名稱:這是您的佇列的唯一識別碼。 選擇一個既形象又容易記住的名字。

2.最大佇列大小:這定義了佇列的最大儲存容量。 您可以將其設定為 1 GB、2 GB、5 GB、10 GB、20 GB、40 GB、80 GB 或 100 GB。 就你的情況而言,它被設定為1 GB

3.最大投遞次數:這指定了訊息在被傳送到死信佇列或丟棄之前可以投遞的最大次數。 這有助於處理訊息處理故障。

4.訊息生存時間 (TTL):這決定了訊息在過期之前在佇列中保留的時間。 您可以以天、小時、分鐘和秒為單位進行設定。 一旦達到 TTL(生存時間),死信訊息要麼被丟棄,要麼在啟用死信機制的情況下被移至死信佇列。

5.鎖定持續時間:這是訊息被接收方鎖定以進行處理的時間。 在此期間,其他接收者無法處理相同訊息。 您可以以天、小時、分鐘和秒為單位設定持續時間。

6.啟用訊息過期時的死信佇列:啟用此功能後,過期(即超過其 TTL)的訊息將移至死信佇列,而不是被丟棄。 這樣可以對過期郵件進行進一步的檢查和處理。

7.啟用分區:此選項可將佇列分區到多個訊息代理程式上,從而提高可擴充性和吞吐量。 分區對於處理大量訊息非常有用。

這些設定可協助您控制 Azure 服務總線佇列的行為和效能,確保其符合應用程式的要求。

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 8

4.完成建立:點選"建立"按鈕完成佇列的建立。 這些步驟可確保您使用 Azure 入口網站在服務總線命名空間中成功建立佇列。

安裝 Azure.Messaging.ServiceBus(服務總線客戶端程式庫),以便使用連線字串連線到 Azure 佇列。

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 9

新增以下程式碼,即可使用 Azure.Messaging.ServiceBus 傳送和接收訊息。

using Azure.Messaging.ServiceBus;
namespace CodeSample
{
    public static class AzureServiceBusDemo
    {
        public static async Task Execute()
        {
            string connectionString = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf";
            string queName = "ironpdf";
            Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus");
            Installation.EnableWebSecurity = true;

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>";
            content += "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>";

            await using var client = new ServiceBusClient(connectionString);
            var msgText = "IronPDF is Awesome Package";
            content += $"<p>Message: {msgText}</p>";

            var tx = client.CreateSender(queName);
            await tx.SendMessageAsync(new ServiceBusMessage(msgText)); // Send message to the queue
            Console.WriteLine($"Sent Below message at: {DateTime.Now}");
            content += $"<p>Sent Below message at: {DateTime.Now}</p>";

            Console.ReadLine(); // wait for user input to read the message;

            var rx = client.CreateReceiver(queName);
            var msg = await rx.ReceiveMessageAsync(); // receive messages
            content += "<h2>Receive Message from Azure.Messaging.ServiceBus Queue: ironpdf</h2>";
            content += $"<p>Recieved Below message at: {DateTime.Now}</p>";
            Console.WriteLine($"Recieved Below message at: {DateTime.Now}");

            content += $"<p>MessageID={msg.MessageId}</p>";
            Console.WriteLine($"MessageID={msg.MessageId}");

            content += $"<p>Message Received: {msg.Body}</p>";
            Console.WriteLine($"Message Received: {msg.Body}");

            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf");
        }
    }
}
using Azure.Messaging.ServiceBus;
namespace CodeSample
{
    public static class AzureServiceBusDemo
    {
        public static async Task Execute()
        {
            string connectionString = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf";
            string queName = "ironpdf";
            Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus");
            Installation.EnableWebSecurity = true;

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>";
            content += "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>";

            await using var client = new ServiceBusClient(connectionString);
            var msgText = "IronPDF is Awesome Package";
            content += $"<p>Message: {msgText}</p>";

            var tx = client.CreateSender(queName);
            await tx.SendMessageAsync(new ServiceBusMessage(msgText)); // Send message to the queue
            Console.WriteLine($"Sent Below message at: {DateTime.Now}");
            content += $"<p>Sent Below message at: {DateTime.Now}</p>";

            Console.ReadLine(); // wait for user input to read the message;

            var rx = client.CreateReceiver(queName);
            var msg = await rx.ReceiveMessageAsync(); // receive messages
            content += "<h2>Receive Message from Azure.Messaging.ServiceBus Queue: ironpdf</h2>";
            content += $"<p>Recieved Below message at: {DateTime.Now}</p>";
            Console.WriteLine($"Recieved Below message at: {DateTime.Now}");

            content += $"<p>MessageID={msg.MessageId}</p>";
            Console.WriteLine($"MessageID={msg.MessageId}");

            content += $"<p>Message Received: {msg.Body}</p>";
            Console.WriteLine($"Message Received: {msg.Body}");

            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf");
        }
    }
}
$vbLabelText   $csharpLabel

程式碼解釋

1.連接字串和佇列名稱:

* `connectionString`變數包含 Azure 服務匯流排命名空間的連線詳細資訊。 它指定了端點、共用存取金鑰和實體路徑(佇列名稱)。

* `queName`變數保存您要操作的服務總線佇列的名稱。

2.演示設定:

* 程式碼首先列印一條訊息:"使用 Azure.Messaging.ServiceBus 示範 IronPDF。"

* 它啟用 Web 安全功能,方法是使用`Installation.EnableWebSecurity = true;` 。

3.建立服務總線客戶端:

* 使用提供的連接字串建立`ServiceBusClient` 。

* 此用戶端可讓您與服務總線實體(佇列、主題等)進行互動。

4.發送訊息:

* 使用`CreateSender`方法向指定的佇列傳送內容為"IronPDF is Awesome Package"的訊息。

* 該訊息是使用`new ServiceBusMessage(msgText)`建立的。

* 發送訊息的時間戳記會印到控制台。

5.接收訊息:

* 使用`CreateReceiver`為同一佇列建立一個接收器。

* 程式碼等待使用者輸入(使用`Console.ReadLine()` )以模擬訊息處理。

* 當收到訊息時,訊息的 ID 和正文會列印到控制台上。

6.產生 PDF 檔案:

* 渲染器根據 HTML 內容(包括已傳送和已接收的訊息)建立 PDF。

* 產生的 PDF 檔案儲存為"AwesomeAzureServiceBusQueueAndIronPdf.pdf"。

輸出

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 10

PDF

Azure.Messaging.ServiceBus 範例 C#(工作原理):圖 11

IronPDF 許可

IronPDF軟體包需要許可證才能運行和產生PDF文件。 在應用程式啟動時,請在存取該軟體包之前,請添加以下程式碼。

IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
$vbLabelText   $csharpLabel

您可以在IronPDF 試用許可證頁面上獲得試用許可證。

結論

在數位轉型和技術快速發展的時代,Azure 服務總線已成為全球企業現代化進程中的關鍵組件。它提供可靠、可擴展且靈活的訊息功能,可協助開發人員建立能夠適應不斷變化的業務需求的彈性敏捷解決方案。

無論是促進無縫整合、實現事件驅動架構,還是確保非同步通信,Azure 服務總線都在推動創新和加速各行業的數位化進程中發揮變革性作用。

隨著各組織不斷採用雲端原生範式和分散式架構,Azure 服務總線證明了微軟致力於協助開發人員和企業實現雲端轉型。 IronPDF簡化了 .NET 應用程式中的 PDF 生成,提供了靈活性和功能,可以直接從程式碼建立專業級文件。

常見問題解答

如何在C#中將HTML轉換為PDF?

您可以使用 IronPDF 的RenderHtmlAsPdf方法將 HTML 字串轉換為 PDF。此外,您也可以使用RenderHtmlFileAsPdf方法將 HTML 檔案轉換為 PDF。

什麼是 Azure 服務總線?它如何增強通訊?

Azure 服務總線是一個完全託管的企業整合訊息代理,它透過促進應用程式和服務之間可靠的訊息傳輸來增強通信,無論這些應用程式和服務是基於雲端的、本地的還是混合環境的。

本文所使用的PDF庫的主要特點是什麼?

IronPDF 庫提供 HTML 轉 PDF、編輯和操作 PDF、圖像轉換以及與各種 .NET 框架和作業系統的跨平台相容性等功能。

如何使用 C# 中的 Azure.Messaging.ServiceBus 傳送訊息?

若要使用 Azure.Messaging.ServiceBus 傳送訊息,您可以建立一個ServiceBusSender ,並使用SendMessageAsync方法將訊息傳送到佇列。

Azure 服務總線中的死信機制是如何運作的?

Azure 服務總線中的死信機制會自動將無法處理的訊息移至單獨的死信佇列中,使開發人員能夠有效地分析和排查這些問題訊息。

Azure 服務總線是否支援事件驅動架構?

是的,Azure 服務匯流排可以與其他 Azure 服務(如 Azure Functions 和 Logic Apps)無縫集成,支援事件驅動架構,並促進可擴展且靈活的訊息傳遞解決方案。

使用 Azure.Messaging.ServiceBus 接收訊息的流程是什麼?

若要使用 Azure.Messaging.ServiceBus 接收訊息,您可以建立一個ServiceBusReceiver ,並使用ReceiveMessageAsync方法處理來自佇列的傳入訊息。

我需要獲得許可才能使用文章中提到的PDF庫嗎?

是的,IronPDF 需要許可證才能產生 PDF 文件。您可以取得應用程式的授權金鑰,或使用 IronPDF 試用許可證頁面提供的試用許可證。

Jacob Mellor,Team Iron 首席技術官
首席技術長

Jacob Mellor 是 Iron Software 的首席技術官,也是一位富有遠見的工程師,率先開發了 C# PDF 技術。作為 Iron Software 核心程式碼庫的最初開發者,他自公司成立之初便參與塑造了其產品架構,並與執行長 Cameron Rimington 一起將其發展成為一家擁有 50 多名員工、服務於 NASA、特斯拉和全球政府機構的公司。

Jacob 於 1998 年至 2001 年在曼徹斯特大學獲得土木工程一級榮譽學士學位。 1999 年,他在倫敦創辦了自己的第一家軟體公司;2005 年,他創建了自己的第一個 .NET 元件。此後,他專注於解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF 和 IronSuite .NET 庫在全球 NuGet 上的安裝量已超過 3000 萬次,其基礎程式碼持續為全球開發者工具提供支援。憑藉 25 年的商業經驗和 41 年的程式設計專長,Jacob 始終致力於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代技術領導者。