跳至頁尾內容
開發者更新

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

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

Azure Service Bus,一個基於雲的消息傳輸服務,成為幫助開發者構建可擴展、解耦和具彈性應用的強大解決方案。 讓我們深入探討Azure Service Bus的領域,以理解其重要性並探索其多種功能。 在本文的後面,我們還將查看IronPDF來管理、生成和讀取PDF文件。

理解Azure Service Bus

Azure Service Bus是一個完全管理的企業整合消息代理,促進了雲端、本地或混合環境應用和服務之間的可靠溝通。

它提供靈活的消息功能,包括排隊和發布/訂閱機制,以促進分散系統中不同組件之間的無縫通信。 此外,它允許批量消息,從而允許多個消息而不超過總大小限制。

Azure Service Bus提供以下好處:

  1. 應用解耦:Service Bus允許您將應用和服務彼此分開。 這種解耦增強了可靠性和可擴展性。
  2. 負載平衡:它在競爭的工作者之間平衡工作,確保資源的高效利用。
  3. 消息傳遞:資料通過消息在應用和服務之間傳遞。 這些消息的消息體可以包含各種資料型別,如JSON、XML或純文字。
  4. 消息場景:常見場景包括傳輸業務資料(如銷售訂單)、負載平衡,以及使用主題和訂閱者啟用出版者和訂閱者之間的關係。
  5. 事務:Service Bus支持原子事務,允許在單一事務範圍內進行多次操作。 一個事務會有多個並發呼叫,而一個消息批次會有單個呼叫。
  6. 消息會話:它促進高規模的工作流協調和有序的消息傳遞。

關鍵功能與能力

  1. 排隊與主題:Azure Service Bus提供排隊和主題作為通信通道。 排隊啟用點對點通信,確保每條消息僅由一個接收器處理,非常適合工作負載分配和負載平衡場景。 另一方面,主題支持發布/訂閱消息模式,允許多個訂閱者獨立接收相關消息,並促進可擴展的事件驅動架構。

  2. 可靠的消息傳遞:使用Azure Service Bus,消息傳遞本質上是可靠的。 它確保消息的持久性,能夠配置消息和錯誤處理程式,容錯能力,以及至少一次的傳遞語義,從而最大限度地減少資料丟失或重複的風險。 此外,它支持事務,允許在多個消息上進行原子操作,從而確保資料完整性。

  3. 死信處理與重試策略:為了有效地處理錯誤消息,Azure Service Bus提供死信功能,允許問題消息自動移動到單獨的隊列中進行分析和故障排除。 此外,它提供靈活的重試策略,使開發者能夠配置自動重試並使用指數回退策略,以提高應用在瞬態故障面前的穩健性。

  4. 分區與擴展:Azure Service Bus支持消息實體的分區,從而將工作負載分散到多個節點上,確保水平擴展性和高吞吐量。 這種能力對於處理大量消息和適應波動的工作負載而不損害性能或可靠性至關重要。

  5. 與Azure生態系統的整合:Azure Service Bus可與其他Azure服務無縫整合,如Azure Functions、Logic Apps、Event Grid和Azure Kubernetes Service (AKS),使開發者能夠輕鬆構建端到端的解決方案。 無論是響應傳入的消息觸發無伺服器函式,還是使用Logic Apps編排複雜的工作流程,Azure Service Bus作為構建強大的事件驅動架構的核心。

簡介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中提取圖像。

    • 從現有的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 Service Bus

在Azure中建立一個具有唯一名稱的名稱空間。 名稱空間是Service Bus資源的容器,如應用中的隊列和主題。

以下是建立名稱空間的方法:

  1. 登錄到Azure門戶。
  2. 轉到"所有服務"頁面。
  3. 在左側導航窗格中,從類別列表中選擇"整合"。
  4. 將滑鼠懸停在"Service Bus"上,並在Service Bus圖示上點擊"+"按鈕。

Azure.Messaging.ServiceBus 範例 C#(如何運作):圖6

要在建立名稱空間頁面上配置基本設置標籤,請按照以下步驟操作:

  1. 訂閱:選擇您欲建立名稱空間的Azure訂閱。
  2. 資源組:選擇欲放置名稱空間的現有資源組,或建立一個新的資源組。

  3. 名稱空間名稱:輸入名稱空間的名稱。 確保名稱符合以下標準:

    • 在Azure中必須是唯一的。

    • 長度必須在6到50個字元之間。

    • 僅能包含字母、數字和連字元"-"。

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

    • 不能以"-sb"或"-mgmt"結尾。
  4. 位置:選擇名稱空間應託管的區域。
  5. 定價層級:對名稱空間選擇價格層級(基本、標準或高級)。 在此範例中,選擇標準。

  6. 在頁面底部選擇審核 + 建立

Azure.Messaging.ServiceBus 範例 C#(如何運作):圖7

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

  2. 一旦資源部署成功,前往資源

您會看到您Service Bus名稱空間的首頁。

在Azure門戶中建立Service Bus 隊列

要在您的Service Bus名稱空間中設置一個隊列,請按照以下步驟操作:

  1. 導航到隊列:進入Azure門戶中的Service Bus名稱空間頁面。 從左側導航選單中選擇"隊列"。
  2. 建立新隊列:在隊列頁面上,點擊工具列上的"+ Queue"按鈕。
  3. 配置隊列:在提供的字段中輸入隊列的名稱。 將其他設置保持為預設值。 您需要在建立Azure Service Bus隊列時配置的選項:

    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 Service Bus隊列的行為和性能,確保其滿足應用的需求。

Azure.Messaging.ServiceBus 範例 C#(如何運作):圖8

  1. 完成建立:點擊"Create"按鈕以完成隊列的建立。 這些步驟確保您能成功地使用Azure門戶在您的Service Bus名稱空間中建立一個隊列。

安裝Azure.Messaging.ServiceBus,這是一個Service Bus客戶端函式庫,用於通過連接字串連接至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");
        }
    }
}
Imports Azure.Messaging.ServiceBus
Namespace CodeSample
	Public Module AzureServiceBusDemo
		Public Async Function Execute() As Task
			Dim connectionString As String = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf"
			Dim queName As String = "ironpdf"
			Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus")
			Installation.EnableWebSecurity = True

			' Instantiate Renderer
			Dim renderer = New ChromePdfRenderer()
			Dim content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>"
			content &= "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>"

			Await var client = New ServiceBusClient(connectionString)
			Dim msgText = "IronPDF is Awesome Package"
			content &= $"<p>Message: {msgText}</p>"

			Dim 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;

			Dim rx = client.CreateReceiver(queName)
			Dim 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}")

			Dim pdf = renderer.RenderHtmlAsPdf(content)
			' Export to a file or Stream
			pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf")
		End Function
	End Module
End Namespace
$vbLabelText   $csharpLabel

程式碼説明

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

    • connectionString 變數包含Azure Service Bus名稱空間的連接資訊。 它指定了端點、共用存取金鑰和實體路徑(隊列名稱)。

    • queName 變數保存您要操作的Service Bus隊列的名稱。
  2. 演示設置:

    • 程式碼以列印資訊開始:"Demo IronPDF與Azure.Messaging.ServiceBus。"

    • 它使用Installation.EnableWebSecurity = true;啟用網路安全性。
  3. 建立Service Bus客戶端:

    • ServiceBusClient符串部件

    • 此客戶端允許您與Service Bus實體(隊列、主題等)進行互動。
  4. 發送消息:

    • 使用CreateSender 方法將內容為"IronPDF是了不起的套件"的消息發送到指定的隊列。

    • 消息使用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";
Imports IronPdf

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

透過IronPDF試用授權頁可獲得試用授權。

結論

在以數位轉型和技術快速發展為特徵的時代,Azure Service Bus成為全球企業現代化旅程中的一個關鍵組成部分。通過提供可靠、可擴展和靈活的消息功能,它幫助開發人員設計出的解決方案能適應不斷變化的業務需求。

無論是促進無縫整合、啟用事件驅動架構,還是確保異步通信,Azure Service Bus在推動創新和加速跨行業的數位倡議中扮演關鍵角色。

隨著組織不斷接受雲原生範式和分散架構,Azure Service Bus成為了Microsoft致力於使開發者和企業走入雲端過程中的一個證明。 IronPDF簡化了.NET應用中的PDF生成,提供建立專業級文件的靈活性和功能,直接從程式碼中實現。

常見問題

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

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF。此外,您還可以使用 RenderHtmlFileAsPdf 方法將 HTML 文件轉換為 PDF。

什麼是 Azure Service Bus?它如何增強通信功能?

Azure Service Bus 是一種完全託管的企業整合訊息代理,通過在應用程式和服務之間促進可靠的訊息傳輸來增強通信功能,無論它們位於雲端、本地還是混合環境中。

本文中使用的 PDF 程式庫的主要特點是什麼?

IronPDF 程式庫提供了 HTML 轉 PDF、編輯和操作 PDF、影像轉換以及與各種 .NET Framework和操作系統的跨平台相容性等功能。

如何使用 Azure.Messaging.ServiceBus 在 C# 中發送訊息?

要使用 Azure.Messaging.ServiceBus 發送訊息,您需要建立 ServiceBusSender,並使用 SendMessageAsync 方法將訊息發送到佇列。

Azure Service Bus 中的死信(Dead-Lettering)如何運作?

Azure Service Bus 中的死信(Dead-Lettering)會自動將無法處理的訊息移動到一個單獨的死信佇列,讓開發者可以有效地分析和解決這些問題訊息。

Azure Service Bus 能否支援事件驅動架構?

是的,Azure Service Bus 可無縫整合其他 Azure 服務,如 Azure Functions 和 Logic Apps,支援事件驅動架構並促進可擴展且靈活的訊息解決方案。

using 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一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話