.NET 帮助

NServiceBus C#(开发人员如何使用)

发布 2024年八月13日
分享:

介绍

NServiceBus 是一个强大且灵活的服务总线,专为 .NET 框架设计,简化了分布式系统的开发。它提供的强大消息传递模式保证了可靠的消息处理和在多个微服务和应用程序间的传输。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进行管理。Sagas使服务平台能够管理状态,并在多个服务之间协调复杂的操作。

可扩展性和定制化

它提供了出色的可扩展性,使开发人员能够个性化处理、处理和传输消息的过程。由于其适应性强,可以在各种场景中使用。

与各种消息平台的集成

NServiceBus 可以集成许多消息系统,包括 MSMQ、RabbitMQ、Azure Service Bus、Amazon SQS 等。这使得开发人员可以选择最适合其需求的通信基础设施解决方案。

在C#中创建和配置NServiceBus

在开始在C#项目中使用NServiceBus之前,您必须首先设置开发环境,创建一个基本项目,并构建一个基本的消息服务和场景。以下是让您入门的分步指南。

创建一个新的 Visual Studio 项目

在 Visual Studio 中,创建一个控制台项目的过程非常简单。在 Visual Studio 环境中,按照以下简单步骤启动一个控制台应用程序:

在使用 Visual Studio 之前,请确保您已经在电脑上安装了 Visual Studio。

开始一个新项目

点击文件,然后选择新建,最后选择项目。

NServiceBus C#(对开发人员的工作原理):图2 - 点击“New”

您可以选择“控制台应用”或“控制台应用 (.NET Core)从下面的项目模板参考列表中选择模板。

在“名称”字段中为您的项目提供一个名称。

NServiceBus C#(开发人员使用方法):图 3 - 为项目提供名称和位置

选择项目的存储位置。

点击“创建”将启动控制台应用程序项目。

NServiceBus C#(对开发人员的工作原理):图4 - 点击“创建”

安装 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项目中,创建一个名为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#

在发送者和接收者项目中,都包含对Messages项目的引用。

在发送者项目中设置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"接收端点,类似于发送端的配置。

消息处理程序

在Receiver项目中,创建一个名为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,无缝融合了其功能、性能、兼容性和易用性 铁软件(Iron Software)灵活的套件提供了额外的Web应用程序和功能,并更加高效地进行开发。

如果有适合项目具体要求的明确许可选项,开发人员可以自信地选择最佳模式。这些好处使开发人员能够有效透明地处理各种困难。

< 前一页
Flurl C#(它如何为开发人员工作)
下一步 >
C# 引用传递(开发人员如何使用)

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 10,731,156 查看许可证 >