跳過到頁腳內容
.NET幫助

NServiceBus C#(對開發者如何理解的工作)

NServiceBus 是一個功能強大且可調整的服務匯流排,設計用於 .NET Framework,以簡化分散式系統的開發。 它提供的強大消息模式保證可靠的消息處理和跨多個微服務和應用的傳遞。 NServiceBus 抽象了底層的消息架構,使開發人員可以專注於業務邏輯,而不是構建分散式系統的複雜性。

相比之下,IronPDF 是一個廣受歡迎的 .NET 庫,用於生成、查看和修改 PDF 文件。 它因易於使用且非常高效地從各種來源(如 ASPX 文件和 HTML)創建 PDF 而聞名。

開發人員可以通過結合 NServiceBus 和 IronPDF 建立可靠、可擴展和可維護的軟件系統,將生成和管理 PDF 文件作為其業務操作的一部分。

我們將在本文中探討如何設置一個簡單的 C# NServiceBus 項目並與 IronPDF 集成,以便您可以構建一個簡化的工作流程,用於在分散式應用架構中管理和生成 PDF 文件。 閱讀完本入門教程後,您應該確切了解這兩種有效技術如何合作以簡化在分散環境中的 PDF 相關任務。

NServiceBus C# 是什麼?

NServiceBus 是一個功能強大且靈活的框架,使創建分佈式系統和面向服務的 .NET 架構變得容易。 通過利用 NServiceBus,您可以輕鬆管理各種消息類型並確保可靠的通信。 這尤其重要,尤其是在無縫消息路由和處理至關重要的 Web 應用程序和類似架構中。 NServiceBus 的消息處理程序有效地處理接收消息,確保每個邏輯組件順暢交互。 NServiceBus 具有以下重要功能:

NServiceBus C#(如何為開發者工作):圖 1 - NServiceBus C#

NServiceBus 的功能

基於消息的通信

NServiceBus 鼓勵系統中不同服務或組件之間的基於消息的通信。 通過解耦組件,此方法創造了更易於擴展和管理的設計。

可靠的消息傳遞

通過自動管理重試、死信隊列和其他容錯技術,保證可靠的消息傳遞。 在網絡中斷和其他頻繁出現故障問題的分佈式系統中,這種可靠性至關重要。

發布/訂閱模型

NServiceBus 支持發布/訂閱模式,使服務可以發布事件並讓其他服務訂閱這些事件。 這使得事件驅動架構成為可能,系統一個組件中的事件修改可以引起其他組件的響應。

Saga 管理

NServiceBus 擁有對 saga 的內置支持,允許管理長時間運行的業務流程。 Saga 使服務平台能夠管理狀態並在多個服務中協調複雜的操作。

可擴展性和自定義

它提供了卓越的可擴展性,允許開發人員個性化消息的處理、運送和傳輸過程。 由於其適應性,它可以用於各種場景。

與各類消息平台集成

NServiceBus 可以與多種消息系統集成,包括 MSMQ、RabbitMQ、Azure Service Bus、Amazon SQS 等。 這使得開發者可以選擇最適合其需求的通信基礎設施解決方案。

在 C# 中創建和配置 NServiceBus

要開始在 C# 項目中使用 NServiceBus,您必須首先設置開發環境,創建一個基本項目,並構建一個基本的消息服務和場景。 這裡有一個逐步指南來讓您入門。

創建新的Visual Studio項目

在 Visual Studio 中,創建控制台項目的過程很簡單。 在 Visual Studio 環境中,按照以下簡單步驟啟動一個控制台應用程序:

確保您已在電腦上安裝Visual Studio。

啟動新項目

單擊文件,然後選擇新建,最後選擇項目。

NServiceBus C#(如何為開發者工作):圖 2 - 點擊“新建”

您可以從以下項目模板列表中選擇“控制台應用程序”或“.NET Core 控制台應用程序”模板。

在"名稱"字段中為項目提供一個名字。

NServiceBus C#(如何為開發者工作):圖 3 - 提供項目的名稱和位置

選擇項目的存儲位置。

點擊“創建”將開始控制檯應用程式項目。

NServiceBus C#(如何為開發者工作):圖 4 - 點擊“創建”

安裝 NServiceBus 套件

導航到 工具 > NuGet 套件管理器 > 套件管理器控制台 以打開 NuGet 套件管理器控制台。

運行以下命令安裝 NServiceBus NuGet 套件。

Install-Package NServiceBus

選擇傳輸器

NServiceBus 需要傳輸器來接收和發送消息。 我們將使用 Learning Transport,因為它易於使用且適合測試和開發。

運行命令安裝 Learning Transport 套件。

Install-Package NServiceBus.RabbitMQ

配置 NServiceBus

設置端點

Program.cs 文件中設置 NServiceBus 端點配置:

using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;

class Program
{
    static async Task Main()
    {
        Console.Title = "Sender";
        var endpointConfiguration = new EndpointConfiguration("SenderEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to send a message...");
        Console.ReadLine();

        // Send a message
        var message = new MyMessage
        {
            Content = "Hello, NServiceBus with RabbitMQ!"
        };
        await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(false);
        Console.WriteLine("Message sent. Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;

class Program
{
    static async Task Main()
    {
        Console.Title = "Sender";
        var endpointConfiguration = new EndpointConfiguration("SenderEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to send a message...");
        Console.ReadLine();

        // Send a message
        var message = new MyMessage
        {
            Content = "Hello, NServiceBus with RabbitMQ!"
        };
        await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(false);
        Console.WriteLine("Message sent. Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
Imports NServiceBus
Imports System
Imports System.Threading.Tasks
Imports Messages

Friend Class Program
	Shared Async Function Main() As Task
		Console.Title = "Sender"
		Dim endpointConfiguration As New EndpointConfiguration("SenderEndpoint")

		' Use RabbitMQ Transport
		Dim transport = endpointConfiguration.UseTransport(Of RabbitMQTransport)()
		transport.ConnectionString("host=localhost")

		' Set up error queue
		endpointConfiguration.SendFailedMessagesTo("error")

		' Set up audit queue
		endpointConfiguration.AuditProcessedMessagesTo("audit")

		' Start the endpoint
		Dim endpointInstance = Await Endpoint.Start(endpointConfiguration).ConfigureAwait(False)
		Console.WriteLine("Press Enter to send a message...")
		Console.ReadLine()

		' Send a message
		Dim message = New MyMessage With {.Content = "Hello, NServiceBus with RabbitMQ!"}
		Await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(False)
		Console.WriteLine("Message sent. Press Enter to exit...")
		Console.ReadLine()

		' Stop the endpoint
		Await endpointInstance.Stop().ConfigureAwait(False)
	End Function
End Class
$vbLabelText   $csharpLabel

NServiceBus C#(如何為開發者工作):圖 5 - 主控台輸出示例

創建消息

添加新類來表示消息。

public class MyMessage : IMessage
{
    public string Content { get; set; }
}
public class MyMessage : IMessage
{
    public string Content { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

創建消息 Handler

添加新類來處理消息。

using NServiceBus;
using System.Threading.Tasks;

public class MyMessageHandler : IHandleMessages<MyMessage>
{
    public Task Handle(MyMessage message, IMessageHandlerContext context)
    {
        Console.WriteLine($"Received message: {message.Content}");
        return Task.CompletedTask;
    }
}
using NServiceBus;
using System.Threading.Tasks;

public class MyMessageHandler : IHandleMessages<MyMessage>
{
    public Task Handle(MyMessage message, IMessageHandlerContext context)
    {
        Console.WriteLine($"Received message: {message.Content}");
        return Task.CompletedTask;
    }
}
Imports NServiceBus
Imports System.Threading.Tasks

Public Class MyMessageHandler
	Implements IHandleMessages(Of MyMessage)

	Public Function Handle(ByVal message As MyMessage, ByVal context As IMessageHandlerContext) As Task
		Console.WriteLine($"Received message: {message.Content}")
		Return Task.CompletedTask
	End Function
End Class
$vbLabelText   $csharpLabel

發送消息

從端點發送消息。 改變你的主要方法以通過處理器傳輸消息。

using NServiceBus;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.Title = "Receiver";
        var endpointConfiguration = new EndpointConfiguration("ReceiverEndpoint");

        // Serialization configuration
        endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.UseConventionalRoutingTopology(QueueType.Quorum);
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        endpointConfiguration.EnableInstallers();

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
using NServiceBus;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.Title = "Receiver";
        var endpointConfiguration = new EndpointConfiguration("ReceiverEndpoint");

        // Serialization configuration
        endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.UseConventionalRoutingTopology(QueueType.Quorum);
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        endpointConfiguration.EnableInstallers();

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
Imports NServiceBus
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main() As Task
		Console.Title = "Receiver"
		Dim endpointConfiguration As New EndpointConfiguration("ReceiverEndpoint")

		' Serialization configuration
		endpointConfiguration.UseSerialization(Of NewtonsoftJsonSerializer)()

		' Use RabbitMQ Transport
		Dim transport = endpointConfiguration.UseTransport(Of RabbitMQTransport)()
		transport.UseConventionalRoutingTopology(QueueType.Quorum)
		transport.ConnectionString("host=localhost")

		' Set up error queue
		endpointConfiguration.SendFailedMessagesTo("error")

		' Set up audit queue
		endpointConfiguration.AuditProcessedMessagesTo("audit")
		endpointConfiguration.EnableInstallers()

		' Start the endpoint
		Dim endpointInstance = Await Endpoint.Start(endpointConfiguration).ConfigureAwait(False)
		Console.WriteLine("Press Enter to exit...")
		Console.ReadLine()

		' Stop the endpoint
		Await endpointInstance.Stop().ConfigureAwait(False)
	End Function
End Class
$vbLabelText   $csharpLabel

NServiceBus C#(如何為開發者工作):圖 6 - 主控台輸出示例

啟動應用程式並建置項目。 主控台應顯示 "Received message: Hello, NServiceBus!" 的消息。

入門指南

在一個 C# 項目中,將 NServiceBus 與 RabbitMQ 和 IronPDF 集成的過程包括配置 NServiceBus 和 RabbitMQ 之間的消息以及使用 IronPDF 創建 PDF。 以下是一個詳細的操作指南以幫助您起步:

IronPDF 是什麼?

IronPDF 是一個 .NET 庫,設計用於創建、讀取、編輯和轉換 PDF 文件。 使用它,程序員可以在 C# 或 VB.NET 應用中使用強大而直觀的工具操作 PDF 文件。 IronPDF 的特性和能力完全描述如下:

NServiceBus C#(如何為開發者工作):圖 7 - IronPDF:C# PDF 庫首頁

IronPDF 的特點

從 HTML 生成 PDF

將 JavaScript、HTML 和 CSS 轉換為 PDF。 支持媒體查詢和響應設計這兩種現代 Web 標準。 使用 HTML 和 CSS 動態生成樣式化的 PDF 文件、發票和報告時非常有用。

PDF 編輯

在已存在的 PDF 中添加文本、圖片和其他素材。 從 PDF 文件中提取文本和圖片。 將多個 PDF 合併為一個文件。分割 PDF 文件成多個文件。 包括註解、頁腳、頁眉和水印。

PDF 轉換

將 Word、Excel、圖像和其他文件格式轉換為 PDF。 PDF 到圖像轉換(PNG、JPEG 等)。

性能和可靠性

在生產環境中,性能和可靠性是設計目標。 能有效地處理大型文件。

IronPDF 的安裝

通過打開 NuGet 套件管理器控制台安裝 IronPDF。

Install-Package IronPdf

配置發送者與消息

消息是一個共享項目(類庫),發送者和接收者都將使用。 在消息項目中定義消息類。 創建一個名為消息的新類庫項目並將其添加到解決方案中。

定義消息

在消息項目中創建一個名為 GeneratePdfMessage.cs 的新類。

using NServiceBus;

public class GeneratePdfMessage : IMessage
{
    public string Content { get; set; }
    public string OutputPath { get; set; }
}
using NServiceBus;

public class GeneratePdfMessage : IMessage
{
    public string Content { get; set; }
    public string OutputPath { get; set; }
}
Imports NServiceBus

Public Class GeneratePdfMessage
	Implements IMessage

	Public Property Content() As String
	Public Property OutputPath() As String
End Class
$vbLabelText   $csharpLabel

在發送者和接收者項目中都包括對消息項目的參考。

在發送者項目中設置 NServiceBus 端點以使用 RabbitMQ 傳送消息。

using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;

class Program
{
    static async Task Main()
    {
        Console.Title = "Sender";
        var endpointConfiguration = new EndpointConfiguration("SenderEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        endpointConfiguration.EnableInstallers();

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to send a message...");
        Console.ReadLine();

        // Send a message
        var message = new GeneratePdfMessage
        {
            Content = "<h1>Hello, NServiceBus with RabbitMQ and IronPDF!</h1>",
            OutputPath = "output.pdf"
        };
        await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(false);
        Console.WriteLine("Message sent. Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;

class Program
{
    static async Task Main()
    {
        Console.Title = "Sender";
        var endpointConfiguration = new EndpointConfiguration("SenderEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");
        endpointConfiguration.EnableInstallers();

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to send a message...");
        Console.ReadLine();

        // Send a message
        var message = new GeneratePdfMessage
        {
            Content = "<h1>Hello, NServiceBus with RabbitMQ and IronPDF!</h1>",
            OutputPath = "output.pdf"
        };
        await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(false);
        Console.WriteLine("Message sent. Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
Imports NServiceBus
Imports System
Imports System.Threading.Tasks
Imports Messages

Friend Class Program
	Shared Async Function Main() As Task
		Console.Title = "Sender"
		Dim endpointConfiguration As New EndpointConfiguration("SenderEndpoint")

		' Use RabbitMQ Transport
		Dim transport = endpointConfiguration.UseTransport(Of RabbitMQTransport)()
		transport.ConnectionString("host=localhost")

		' Set up error queue
		endpointConfiguration.SendFailedMessagesTo("error")

		' Set up audit queue
		endpointConfiguration.AuditProcessedMessagesTo("audit")
		endpointConfiguration.EnableInstallers()

		' Start the endpoint
		Dim endpointInstance = Await Endpoint.Start(endpointConfiguration).ConfigureAwait(False)
		Console.WriteLine("Press Enter to send a message...")
		Console.ReadLine()

		' Send a message
		Dim message = New GeneratePdfMessage With {
			.Content = "<h1>Hello, NServiceBus with RabbitMQ and IronPDF!</h1>",
			.OutputPath = "output.pdf"
		}
		Await endpointInstance.Send("ReceiverEndpoint", message).ConfigureAwait(False)
		Console.WriteLine("Message sent. Press Enter to exit...")
		Console.ReadLine()

		' Stop the endpoint
		Await endpointInstance.Stop().ConfigureAwait(False)
	End Function
End Class
$vbLabelText   $csharpLabel

端點配置: 通過調用 new EndpointConfiguration("SenderEndpoint") 初始化名為 "SenderEndpoint" 的端點。

endpointConfiguration 是傳輸的配置。 通過連接到本地 RabbitMQ 實例,UseTransport() 方法設置 NServiceBus 使用 RabbitMQ 作為傳輸機制。

審計和錯誤隊列 使用 SendFailedMessagesTo("error")AuditProcessedMessagesTo("audit") 分別配置何處發送錯誤消息和審計已處理的消息。

消息已發送: endpointInstance.Send("ReceiverEndpoint", message) 將 GeneratePdfMessage 發送到 "ReceiverEndpoint"。

配置接收者以生成 PDF

在接收者項目中設置 NServiceBus 端點,以通過 RabbitMQ 接受消息並使用 IronPDF 生成 PDF。

using NServiceBus;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.Title = "Receiver";
        var endpointConfiguration = new EndpointConfiguration("ReceiverEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
using NServiceBus;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.Title = "Receiver";
        var endpointConfiguration = new EndpointConfiguration("ReceiverEndpoint");

        // Use RabbitMQ Transport
        var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
        transport.ConnectionString("host=localhost");

        // Set up error queue
        endpointConfiguration.SendFailedMessagesTo("error");

        // Set up audit queue
        endpointConfiguration.AuditProcessedMessagesTo("audit");

        // Start the endpoint
        var endpointInstance = await Endpoint.Start(endpointConfiguration).ConfigureAwait(false);
        Console.WriteLine("Press Enter to exit...");
        Console.ReadLine();

        // Stop the endpoint
        await endpointInstance.Stop().ConfigureAwait(false);
    }
}
Imports NServiceBus
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main() As Task
		Console.Title = "Receiver"
		Dim endpointConfiguration As New EndpointConfiguration("ReceiverEndpoint")

		' Use RabbitMQ Transport
		Dim transport = endpointConfiguration.UseTransport(Of RabbitMQTransport)()
		transport.ConnectionString("host=localhost")

		' Set up error queue
		endpointConfiguration.SendFailedMessagesTo("error")

		' Set up audit queue
		endpointConfiguration.AuditProcessedMessagesTo("audit")

		' Start the endpoint
		Dim endpointInstance = Await Endpoint.Start(endpointConfiguration).ConfigureAwait(False)
		Console.WriteLine("Press Enter to exit...")
		Console.ReadLine()

		' Stop the endpoint
		Await endpointInstance.Stop().ConfigureAwait(False)
	End Function
End Class
$vbLabelText   $csharpLabel

此設置,適用於 "ReceiverEndpoint" 接收端點,與發送者配置相似。

消息處理器

在接收者項目中創建一個名為 GeneratePdfMessageHandler.cs 的新類。

using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;
using IronPdf;

public class GeneratePdfMessageHandler : IHandleMessages<GeneratePdfMessage>
{
    public Task Handle(GeneratePdfMessage message, IMessageHandlerContext context)
    {
        Console.WriteLine($"Received message to generate PDF with content: {message.Content}");

        // Generate PDF
        var renderer = new HtmlToPdf();
        var pdf = renderer.RenderHtmlAsPdf(message.Content);
        pdf.SaveAs(message.OutputPath);
        Console.WriteLine($"PDF generated and saved to: {message.OutputPath}");

        return Task.CompletedTask;
    }
}
using NServiceBus;
using System;
using System.Threading.Tasks;
using Messages;
using IronPdf;

public class GeneratePdfMessageHandler : IHandleMessages<GeneratePdfMessage>
{
    public Task Handle(GeneratePdfMessage message, IMessageHandlerContext context)
    {
        Console.WriteLine($"Received message to generate PDF with content: {message.Content}");

        // Generate PDF
        var renderer = new HtmlToPdf();
        var pdf = renderer.RenderHtmlAsPdf(message.Content);
        pdf.SaveAs(message.OutputPath);
        Console.WriteLine($"PDF generated and saved to: {message.OutputPath}");

        return Task.CompletedTask;
    }
}
Imports NServiceBus
Imports System
Imports System.Threading.Tasks
Imports Messages
Imports IronPdf

Public Class GeneratePdfMessageHandler
	Implements IHandleMessages(Of GeneratePdfMessage)

	Public Function Handle(ByVal message As GeneratePdfMessage, ByVal context As IMessageHandlerContext) As Task
		Console.WriteLine($"Received message to generate PDF with content: {message.Content}")

		' Generate PDF
		Dim renderer = New HtmlToPdf()
		Dim pdf = renderer.RenderHtmlAsPdf(message.Content)
		pdf.SaveAs(message.OutputPath)
		Console.WriteLine($"PDF generated and saved to: {message.OutputPath}")

		Return Task.CompletedTask
	End Function
End Class
$vbLabelText   $csharpLabel

GeneratePdfMessageHandler 使用 IHandleMessages 接口來處理 GeneratePdfMessage 類型的消息。

NServiceBus C#(如何為開發者工作):圖 8 - 主控台輸出示例

處理方法: 接收到消息後,Handle 函數使用 IronPDF 創建 PDF。 HtmlToPdf 渲染器代碼將消息中的 HTML 內容轉換為 PDF,然後將其保存到指定的輸出路徑。

NServiceBus C#(如何為開發者工作):圖 9 - 使用 NServiceBus 與 RabbitMQ 聯合 IronPDF 的 PDF 輸出

結論

NServiceBus 可以與 RabbitMQ 和 IronPDF 集成在 C# 中,為需要動態和可靠生成 PDF 的分散系統提供一個可擴展和穩定的解決方案。 這種結合利用 NServiceBus 的消息處理功能,RabbitMQ 的可靠性和作為消息代理的適應性,和 IronPDF 的強大 PDF 編輯工具。 最終的架构确保了服务之间的解耦,允许自治演化和扩展性。

RabbitMQ 还确保在网络或应用出现故障时也能传递消息。 NServiceBus 简化了消息路由和处理,IronPDF 则使得将 HTML 文本转换成高质量的 PDF 文档成为可能。 这种集成不仅改善了系统的可维护性和可靠性,还为开发复杂的大规模应用提供了一个灵活的框架。

最后,通过將 IronPDF 和 Iron Software 添加到您的 .NET 編程工具集中,您可以有效地處理條碼,生成 PDF,執行 OCR 和鏈接 Excel。 IronPDF’s Licensing Page, which starts at $799, seamlessly blends its features and the performance, compatibility, and ease of use of Iron Software 官方網站 的靈活套件的性能、兼容性和易用性,提供額外的網絡應用和功能,以及更高效的開發。

如果有明確定義的授權選項,專為項目的特定需求量身定制,開發者可以有信心地選擇最佳模式。 這些優勢使開發者能夠有效和透明地處理各種挑戰。

常見問題解答

我如何在 C# 中使用 NServiceBus 進行分佈式系統開發?

NServiceBus 通過抽象消息架構簡化了 C# 中的分佈式系統開發。這允許開發人員專注於業務邏輯,同時確保跨微服務的可靠消息處理和發送。

將 NServiceBus 與 PDF 管理庫集成有哪些好處?

將 NServiceBus 與 IronPDF 等 PDF 管理庫集成,允許在分佈式應用程序中有效進行 PDF 生成和管理,從而實現可擴展和可維護的軟體系統。

如何設置帶有 NServiceBus 和 RabbitMQ 的 C# 項目?

要設置帶有 NServiceBus 和 RabbitMQ 的 C# 項目,請在 Visual Studio 中創建一個新的控制台應用程序,安裝 NServiceBus 和 RabbitMQ NuGet 包,並在您的代碼中配置端點和消息傳輸。

NServiceBus 如何增強基於消息的通信?

NServiceBus 通過提供可靠的消息模式,例如發布/訂閱模型和 Saga 管理,增強了基於消息的通信,確保消息正確傳遞並在分佈式系統中正確處理。

IronPDF 在使用 NServiceBus 的分佈式系統中扮演什麼角色?

IronPDF 在使用 NServiceBus 的分佈式系統中發揮關鍵作用,提供強大的 PDF 生成和操作功能,這些功能可集成到消息驅動的工作流程中以自動化文檔處理過程。

如何在使用 C# 的分佈式系統中確保可靠的 PDF 生成?

在使用 C# 的分佈式系統中可靠生成 PDF 可以通過集成 NServiceBus 來進行消息處理,並使用 IronPDF 進行 PDF 生成,利用 RabbitMQ 的消息功能協調任務並確保一致性。

NServiceBus 中的發布/訂閱模型如何運作?

在 NServiceBus 中,發布/訂閱模型允許服務發布其他服務可訂閱的事件。這使得事件驅動的架構中,一個組件的變化可以觸發其他組件的行動,提高系統的響應能力和可擴展性。

NServiceBus 中的 Saga 管理有何重要意義?

NServiceBus 中的 Saga 管理對於協調跨多個服務的長期業務流程意義重大,確保復雜的工作流程在分佈式系統中正確且一致地執行。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。