.NET 幫助

NServiceBus C#(如何為開發人員工作)

發佈 2024年8月13日
分享:

介紹

NServiceBus 是一個強大且適應性強的服務總線,專為 .NET Framework 設計,簡化了分散式系統的開發。 它提供的強大訊息模式保證了跨多個微服務和應用程式的可靠訊息處理和傳遞。 NServiceBus 抽象出底層的消息架構,使開發者能夠專注於業務邏輯,而不是構建分布式系統的複雜細節。

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

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

在本文中,我們將探討如何設置一個簡單的 C# NServiceBus 專案並將其與 IronPDF 集成,從而在分散式應用程式架構中構建管理和生成 PDF 文件的精簡工作流程。 閱讀完這篇入門教程後,您應該明白這兩種有效技術如何合作以簡化分散環境中的PDF相關任務。

什麼是 NServiceBus C#?

NServiceBus 是一個強大且可調適的框架,能夠輕鬆建立分散式系統和面向服務的 .NET 架構。 透過使用 NServiceBus,您可以輕鬆管理各種消息類型並確保可靠的通信。 這是至關重要的,特別是在網頁應用程式和類似架構中,無縫的訊息路由和處理是不可或缺的。 NServiceBus 的消息處理器有效地處理接收消息,確保每個邏輯組件順利互動。 NServiceBus 具有以下重要功能:

NServiceBus C#(開發人員如何使用):圖1 - NServiceBus C#

NServiceBus 的功能

基於消息的通信

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

可靠的訊息傳遞

透過自動管理重試、死信佇列和其他容錯技術,確保可靠的訊息傳遞。 在分佈式系統中,當網路故障和其他故障問題頻繁發生時,這種可靠性至關重要。

發布/訂閱模型

NServiceBus支持发布/订阅模式,使服务能够发布事件,并让其他服务订阅这些事件。 這使得事件驅動架構成為可能,在系統的一個組件中對事件進行的修改可以導致其他組件中的響應。

Saga 管理

由於 NServiceBus 對長篇故事的內建支持,長期運行的業務流程可藉此進行管理。 Sagas 使服務平台能夠管理狀態並協調多個服務之間的複雜操作。

擴展性和自訂性

它提供了卓越的擴充性,使開發人員能夠個性化處理、處理和傳輸過程中的消息。 由於其適應性,它可以用於各種情境。

與各種消息平台的整合

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

在 C# 中創建和配置 NServiceBus

在使用 NServiceBus 建立 C# 專案之前,您必須先設定開發環境,建立一個基本的專案,並建立基本的消息服務和場景。 以下是讓您開始的逐步指南。

建立一個新的 Visual Studio 專案

在 Visual Studio 中,創建控制台專案的過程很簡單。 在 Visual Studio 環境中使用以下簡單步驟來啟動控制台應用程式:

在使用之前,請確保您的電腦上已安裝 Visual Studio。

開始新專案

按一下「檔案」,然後選取「新的」,最後選擇「專案」。

NServiceBus C#(對開發人員的運作方式):圖2 - 點擊“新建”

您可以選擇「Console App」或「Console App」(.NET Core)「從以下專案範本參考清單中選擇範本。」

在「名稱」欄位中為您的專案提供一個名稱。

NServiceBus C#(開發人員使用方式): 圖 3 - 提供專案名稱和位置

選擇專案的儲存位置。

點擊“Create”將開始控制台應用程式專案。

NServiceBus C#(開發者的運作方式):圖 4 - 點擊「create」

安裝 NServiceBus 套件

導航至 工具 > NuGet 套件管理員 > 套件管理員主控台 以開啟 NuGet 套件管理員主控台。

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

Install-Package NServiceBus
Install-Package NServiceBus
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

選擇運輸方式

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

通過執行來安裝 Learning Transport 套件。

Install-Package NServiceBus.RabbitMQ
Install-Package NServiceBus.RabbitMQ
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

配置 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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
VB   C#

創建訊息處理程序

要處理該訊息,新增一個類別。

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;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

發送訊息

從端點發送訊息。 使用處理程序協助來調整傳遞訊息的主要方式。

using NServiceBus;
using System;
using System.Threading.Tasks;
class Program
{
    static async Task Main()
    {
    Console.Title = "Receiver";
    var endpointConfiguration = new EndpointConfiguration("ReceiverEndpoint");
    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");
    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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

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。 支援媒體查詢和響應式設計,這是當代的兩個網頁標準。 適用於使用HTML和CSS動態生成樣式化PDF文件、發票和報表。

PDF 編輯

向現有的PDF添加文字、圖片及其他材料。 從 PDF 文件中提取文字和圖片。 將多個PDF合併為一個文件。將PDF文件拆分成多個文件。 包括註釋、頁腳、頁眉和浮水印。

PDF 轉換

將 Word、Excel、圖像及其他文件格式轉換為 PDF。 PDF 轉換成圖像(PNG,JPEG 等。).

性能與可靠性

高性能和可靠性是生產環境中的設計目標。 高效管理大型文件。

安裝 IronPDF

透過開啟 NuGet 套件管理器主控台來安裝 IronPDF。

Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
VB   C#

配置發送者與訊息

Messages 是一個共享專案(類別庫)寄件者和收件者都將一起使用。 在 Messages 專案中定義消息類別。 建立一個名為 Messages 的新類別庫專案,並將其添加到解決方案中。

定義訊息

在Messages專案中,建立一個新的類別,名為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; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在發送者和接收者項目中,包括對消息項目的引用。

在發送端專案中設定 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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

端點配置: 透過呼叫 new EndpointConfiguration,端點會被初始化為 "SenderEndpoint"。("SenderEndpoint").

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

審計和錯誤佇列 將失敗的消息和已處理的審計消息發送到何處是通過 SendFailedMessagesTo 來配置的。(「錯誤」)和AuditProcessedMessagesTo(審計),分別。

訊息已發送:endpointInstance.A GeneratePdfMessage 通過 Send 發送到 "ReceiverEndpoint"("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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

此設定與發送方配置類似,針對的是 "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;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

GeneratePdfMessage 使用 IHandleMessages 介面處理器表明它將處理 類型的消息生成 Pdf 訊息透過實作 IHandleMessages 介面。

NServiceBus C#(對開發者的工作方式):圖 8 - 範例控制台輸出

管理方法:收到訊息後,Handle 函數使用 IronPDF 創建一個 PDF。 訊息中的 HTML 內容由 HtmlToPdf 渲染器程式碼轉換為 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 的授權頁面其起售价为$749,無縫融合其功能與性能、相容性及易用性IronSoftware的官方網站靈活的套件提供額外的網路應用程式和功能,以及更高效的開發。

如果有針對專案具體需求量身定制的明確許可選項,開發人員就可以自信地選擇最佳模型。 這些好處使開發人員能夠有效且透明地處理各種困難。

< 上一頁
Flurl C#(它如何為開發人員工作)
下一個 >
C# 引用传递(對開發者的運作方式)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >