在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
NServiceBus 是一个强大且灵活的服务总线,专为 .NET 框架设计,简化了分布式系统的开发。它提供的强大消息传递模式保证了可靠的消息处理和在多个微服务和应用程序间的传输。NServiceBus 抽象了底层的消息传递架构,让开发人员可以专注于业务逻辑,而不是构建分布式系统的复杂性。
相反,IronPDF 是一个广受欢迎的 .NET 库,用于生成、查看和修改 PDF 文件。它因其易用性和高效性而倍受推崇,能非常高效地从各种来源(如 ASPX 文件和 HTML)生成 PDF。
通过结合 NServiceBus 和 IronPDF,开发人员可以构建可靠、可扩展且可维护的软件系统,这些系统可以作为业务操作的一部分生成和管理 PDF 文档。
在本文中,我们将展示如何设置一个简单的 C# NServiceBus 项目并将其与 IronPDF 集成,这样您就可以在分布式应用架构中建立一个流畅的工作流程来管理和生产 PDF 文档。阅读此介绍教程后,您应该清楚这两种有效技术如何合作,在分布式环境中简化与 PDF 相关的任务。
NServiceBus 是一个强大且灵活的框架,可以轻松创建分布式系统和面向服务的 .NET 架构。通过使用 NServiceBus,您可以轻松管理各种消息类型并确保可靠通信。这一点非常关键,特别是在网络应用程序和类似架构中,消息路由和处理的无缝性是必不可少的。NServiceBus 的消息处理程序有效地处理接收消息,确保每个逻辑组件顺畅地交互。NServiceBus 具有以下重要特性:
NServiceBus 鼓励系统中不同服务或组件之间的基于消息的通信。通过解耦组件,这种方法创建了更容易扩展和管理的设计。
通过自动管理重试、死信队列和其他容错技术,保证了可靠的消息传递。在分布式系统中,网络中断和其他故障问题频繁发生,这种可靠性非常重要。
NServiceBus 支持发布/订阅模式,使服务能够发布事件,并让其他服务订阅这些事件。这使事件驱动的架构成为可能,其中系统一个组件中对事件的修改可以引起其他组件的响应。
借助NServiceBus的内置支持,长时间运行的业务流程可以使用Sagas进行管理。Sagas使服务平台能够管理状态,并在多个服务之间协调复杂的操作。
它提供了出色的可扩展性,使开发人员能够个性化处理、处理和传输消息的过程。由于其适应性强,可以在各种场景中使用。
NServiceBus 可以集成许多消息系统,包括 MSMQ、RabbitMQ、Azure Service Bus、Amazon SQS 等。这使得开发人员可以选择最适合其需求的通信基础设施解决方案。
在开始在C#项目中使用NServiceBus之前,您必须首先设置开发环境,创建一个基本项目,并构建一个基本的消息服务和场景。以下是让您入门的分步指南。
在 Visual Studio 中,创建一个控制台项目的过程非常简单。在 Visual Studio 环境中,按照以下简单步骤启动一个控制台应用程序:
在使用 Visual Studio 之前,请确保您已经在电脑上安装了 Visual Studio。
点击文件,然后选择新建,最后选择项目。
您可以选择“控制台应用”或“控制台应用 (.NET Core)从下面的项目模板参考列表中选择模板。
在“名称”字段中为您的项目提供一个名称。
选择项目的存储位置。
点击“创建”将启动控制台应用程序项目。
导航到工具 > NuGet 包管理器 > 包管理器控制台以打开 NuGet 包管理器控制台。
运行以下命令以安装 NServiceBus NuGet 包。
Install-Package NServiceBus
Install-Package NServiceBus
IRON VB CONVERTER ERROR developers@ironsoftware.com
NServiceBus 需要通过传输方式来接收和发送消息。我们将选择 Learning Transport,因为它易于使用,并且适合测试和开发。
通过执行以下命令安装 Learning Transport 包。
Install-Package NServiceBus.RabbitMQ
Install-Package NServiceBus.RabbitMQ
IRON VB CONVERTER ERROR developers@ironsoftware.com
在您的 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
为了表示消息,请添加一个新类。
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
为了处理消息,添加一个新类。
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
从端点发送消息。使用处理程序帮助调整您的主要消息传递方式。
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
启动应用程序并构建项目。控制台应显示消息 "Received message: Hello, NServiceBus"!"
在一个 C# 项目中,将 NServiceBus 与 RabbitMQ 和 IronPDF 集成涉及配置 NServiceBus 和 RabbitMQ 之间的消息以及使用 IronPDF 创建 PDF。以下是一个详细的操作指南来帮助你开始:
IronPDF 是一个针对.NET设计的库,用于创建、读取、编辑和转换 PDF 文件。通过它,程序员可以在 C# 或 VB.NET 应用程序中使用一个强大且直观的工具处理 PDF 文件。IronPDF 的特点和功能在下面详细描述:
从HTML生成PDF
将JavaScript、HTML和CSS转换为PDF。支持媒体查询和响应式设计这两个当代网页标准。适用于使用HTML和CSS生成动态样式的PDF文档、发票和报告。
PDF编辑
向现有的PDF添加文本、图片和其他材料。从PDF文件取出文本和图片。将多个PDF文件合并为一个文件。将PDF文件拆分成多个文档。包括注释、页脚、页眉和水印。
PDF转换
将Word、Excel、图片和其他文件格式转换为PDF。PDF转换为图片。 (PNG、JPEG 等。).
性能和可靠性
在生产环境中的设计目标是高性能和可靠性。有效管理庞大文档。
通过打开 NuGet 包管理器控制台来安装 IronPDF。
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
消息是一个共享项目 (类库) 双方都会使用。 在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
在发送者和接收者项目中,都包含对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
端点配置: 通过调用 new EndpointConfiguration 使用名称“SenderEndpoint”初始化端点(“SenderEndpoint”).
endpointConfiguration 是传输配置。通过连接到本地 RabbitMQ 实例,方法 UseTransport() 设置 NServiceBus 使用 RabbitMQ 作为传输机制。
审计和错误队列 用 SendFailedMessagesTo 配置发送失败消息和审计处理消息的位置。(“错误”) 和AuditProcessedMessagesTo(审计),分别。
消息已发送: endpointInstance.A GeneratePdfMessage 通过 Send 发送到“ReceiverEndpoint”。("ReceiverEndpoint",消息) 功能。
在接收器项目中设置 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
这种设置,对于"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
GeneratePdfMessage 使用 IHandleMessages 接口处理程序表示它将处理类型为 生成Pdf消息 通过实现IHandleMessages接口。
管理方法:接收到消息后,Handle 函数使用 IronPDF 创建一个 PDF。消息中的 HTML 内容由 HtmlToPdf 渲染器代码转换为 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应用程序和功能,并更加高效地进行开发。
如果有适合项目具体要求的明确许可选项,开发人员可以自信地选择最佳模式。这些好处使开发人员能够有效透明地处理各种困难。