.NET 帮助

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

发布 2024年八月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 支持发布/订阅模式,使服务能够发布事件并让其他服务订阅这些事件。 这使得事件驱动架构成为可能,在这种架构中,对系统中一个组件的事件所做的修改会引起其他组件的响应。

传奇管理

由于 NServiceBus 集成了对传奇的支持,因此可以使用 NServiceBus 管理长期运行的业务流程。 Sagas 使服务平台能够管理状态并协调多个服务之间错综复杂的操作。

可扩展性和定制

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

与各种消息平台集成

许多消息传递系统,包括 MSMQ、RabbitMQ、Azure 服务总线、Amazon SQS 等,都可以与 NServiceBus 集成。 这样,开发人员就能选择最符合其要求的通信基础设施解决方案。

在C#中创建和配置NServiceBus

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

创建一个新的Visual Studio项目

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

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

开始一个新项目

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

NServiceBus C#(如何为开发人员工作):图 2 - 单击 新建

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

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

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,因为它易于使用,并能很好地进行测试和开发。

执行以下操作,安装学习传输软件包。

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:你好,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#

通过信息配置发件人

信息 "是一个共享项目(类库)译文必须是发件人和收件人都会使用的语言。 在 "消息 "项目中定义消息类。 创建名为 "消息 "的新类库项目并将其添加到解决方案中。

确定信息

在 "消息 "项目中,创建一个名为 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 将通过发送功能发送到 "ReceiverEndpoint"。("ReceiverEndpoint",消息)功能。

配置接收器以生成 PDF

在 Receiver 项目中设置 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 可与 C# 中的 RabbitMQ 和 IronPDF 集成,为需要动态、可靠地生成 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,781,565 查看许可证 >