Ir para o conteúdo do rodapé
AJUDA DO .NET

NServiceBus em C# (Como funciona para desenvolvedores)

O NServiceBus é um barramento de serviços poderoso e adaptável, projetado para o .NET Framework , que simplifica o desenvolvimento de sistemas distribuídos. Os robustos padrões de mensagens que oferece garantem o processamento e a entrega confiáveis ​​de mensagens em diversos microsserviços e aplicações. O NServiceBus abstrai a arquitetura de mensagens subjacente, permitindo que os desenvolvedores se concentrem na lógica de negócios em vez das complexidades da construção de sistemas distribuídos.

Em contrapartida, o IronPDF é uma biblioteca .NET bastante popular para gerar, visualizar e modificar arquivos PDF. É bastante conhecido por ser fácil de usar e muito eficiente na criação de PDFs a partir de diversas fontes, como arquivos ASPX e HTML.

Os desenvolvedores podem criar sistemas de software confiáveis, escaláveis ​​e de fácil manutenção, capazes de gerar e gerenciar documentos PDF como parte de suas operações comerciais, combinando NServiceBus e IronPDF.

Neste artigo, veremos como configurar um projeto NServiceBus simples em C# e integrá-lo ao IronPDF , para que você possa criar um fluxo de trabalho simplificado para gerenciar e produzir documentos PDF em uma arquitetura de aplicativo distribuído. Após ler este tutorial introdutório, você deverá saber exatamente como essas duas tecnologias eficazes podem cooperar para simplificar suas tarefas relacionadas a PDFs em um ambiente distribuído.

O que é NServiceBus em C#?

O NServiceBus é um framework poderoso e adaptável que facilita a criação de sistemas distribuídos e arquiteturas .NET orientadas a serviços. Ao utilizar o NServiceBus, você pode gerenciar facilmente diversos tipos de mensagens e garantir uma comunicação confiável. Isso é crucial, especialmente em aplicações web e arquiteturas similares, onde o roteamento e o processamento de mensagens sem interrupções são essenciais. Os manipuladores de mensagens do NServiceBus lidam de forma eficaz com o recebimento de mensagens, garantindo que cada componente lógico interaja sem problemas. O NServiceBus possui as seguintes características importantes:

NServiceBus C# (Como funciona para desenvolvedores): Figura 1 - NServiceBus C#

Características do NServiceBus

Comunicação baseada em mensagens

O NServiceBus incentiva a comunicação baseada em mensagens entre diferentes serviços ou componentes em um sistema. Ao desacoplar os componentes, esse método cria projetos que são mais fáceis de dimensionar e gerenciar.

Mensagens confiáveis

Ao gerenciar automaticamente novas tentativas, filas de mensagens não entregues e outras técnicas de tolerância a falhas, garante a entrega confiável de mensagens. Em sistemas distribuídos, onde interrupções de rede e outros problemas de falha são frequentes, essa confiabilidade é essencial.

Modelo de Publicação/Assinatura

O padrão de publicação/assinatura é suportado pelo NServiceBus, permitindo que os serviços publiquem eventos e que outros serviços se inscrevam nesses eventos. Isso possibilita arquiteturas orientadas a eventos, nas quais modificações feitas em eventos em um componente do sistema podem causar respostas em outros componentes.

Gestão de Saga

Processos de negócios de longa duração podem ser gerenciados com o NServiceBus graças ao seu suporte integrado para sagas. As sagas permitem que a plataforma de serviços gerencie o estado e coordene operações complexas entre diversos serviços.

Extensibilidade e personalização

Oferece um nível excepcional de extensibilidade, permitindo que os desenvolvedores personalizem o processo de tratamento, processamento e transporte de mensagens. Devido à sua adaptabilidade, pode ser utilizado em diversos cenários.

Integração com diversas plataformas de mensagens

Diversos sistemas de mensagens, incluindo MSMQ, RabbitMQ, Azure Service Bus, Amazon SQS e outros, podem ser integrados ao NServiceBus. Isso permite que os desenvolvedores selecionem a solução de infraestrutura de comunicação que melhor atenda às suas necessidades.

Criar e configurar o NServiceBus em C

Primeiro, você precisa configurar seu ambiente de desenvolvimento, criar um projeto básico e desenvolver um serviço de mensagens e um cenário básicos antes de começar a usar o NServiceBus em um projeto C#. Aqui está um guia passo a passo para você começar.

Criar um novo projeto do Visual Studio

No Visual Studio, o processo de criação de um projeto de console é simples. Siga estes passos simples no ambiente Visual Studio para iniciar uma aplicação de console:

Certifique-se de ter instalado o Visual Studio no seu computador antes de usá-lo.

Iniciar um novo projeto

Clique em Arquivo, depois selecione Novo e, por fim, Projeto.

NServiceBus C# (Como funciona para desenvolvedores): Figura 2 - Clique em Novo

Você pode selecionar o modelo "Aplicativo de Console" ou "Aplicativo de Console (.NET Core)" na lista de referências de modelos de projeto abaixo.

Dê um nome ao seu projeto no campo "Nome".

NServiceBus C# (Como funciona para desenvolvedores): Figura 3 - Forneça um nome e um local para o projeto

Escolha um local de armazenamento para o projeto.

Clicar em "Criar" iniciará o projeto do aplicativo de console.

NServiceBus C# (Como funciona para desenvolvedores): Figura 4 - Clique em Criar

Instalar pacotes NServiceBus

Acesse Ferramentas > Gerenciador de Pacotes NuGet > Console do Gerenciador de Pacotes para abrir o Console do Gerenciador de Pacotes NuGet .

Execute o seguinte comando para instalar o pacote NuGet NServiceBus.

Install-Package NServiceBus

Escolha um meio de transporte

O NServiceBus precisa de transporte para receber e enviar mensagens. Vamos continuar usando o Learning Transport, pois é fácil de usar e funciona bem para testes e desenvolvimento.

Instale o pacote Learning Transport executando o seguinte comando.

Install-Package NServiceBus.RabbitMQ

Configurar NServiceBus

Configurar o ponto de extremidade

Configure o endpoint do NServiceBus no seu arquivo Program.cs:

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# (Como funciona para desenvolvedores): Figura 5 - Exemplo de saída do console

Criar uma mensagem

Para representar a mensagem, adicione uma nova classe.

public class MyMessage : IMessage
{
    public string Content { get; set; }
}
public class MyMessage : IMessage
{
    public string Content { get; set; }
}
Public Class MyMessage
    Implements IMessage

    Public Property Content As String
End Class
$vbLabelText   $csharpLabel

Criar um manipulador de mensagens

Para lidar com a mensagem, adicione uma nova classe.

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

Enviar uma mensagem

Enviar uma mensagem a partir do ponto de extremidade. Adapte sua forma principal de transmitir uma mensagem com a ajuda do manipulador.

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# (Como funciona para desenvolvedores): Figura 6 - Exemplo de saída do console

Inicie a aplicação e compile o projeto. O console deve exibir a mensagem "Mensagem recebida: Olá, NServiceBus!"

Começando

Em um projeto C#, a integração do NServiceBus com o RabbitMQ e o IronPDF envolve a configuração de mensagens entre o NServiceBus e o RabbitMQ, bem como o uso do IronPDF para criar PDFs. Aqui está um guia completo para você começar:

O que é o IronPDF ?

IronPDF é uma biblioteca .NET projetada para criar, ler, editar e converter arquivos PDF. Com ele, os programadores podem trabalhar com arquivos PDF em aplicativos C# ou VB .NET com uma ferramenta poderosa e intuitiva. As características e capacidades do IronPDF são descritas detalhadamente abaixo:

NServiceBus C# (Como funciona para desenvolvedores): Figura 7 - IronPDF: Página inicial da biblioteca PDF em C#

Funcionalidades do IronPDF

Geração de PDF a partir de HTML

Converter JavaScript, HTML e CSS para PDF. Suporta consultas de mídia e design responsivo, dois padrões web contemporâneos. Útil para produzir documentos PDF, faturas e relatórios com estilo dinâmico usando HTML e CSS.

Edição de PDF

Adicione texto, imagens e outros materiais a PDFs já existentes. Extrair texto e imagens de arquivos PDF. Combinar vários PDFs em um único arquivo. Dividir arquivos PDF em vários documentos. Inclua anotações, rodapés, cabeçalhos e marcas d'água.

Conversão de PDF

Converta arquivos do Word, Excel, imagens e outros formatos para PDF. Conversão de PDF para imagem (PNG, JPEG, etc.).

Desempenho e confiabilidade

Alto desempenho e confiabilidade são os objetivos de projeto em ambientes de produção. Gerencia documentos extensos de forma eficiente.

Instalação do IronPDF

Instale o IronPDF abrindo o Console do Gerenciador de Pacotes NuGet .

Install-Package IronPdf

Configure o remetente com a mensagem.

Messages é um projeto compartilhado (biblioteca de classes) que será usado tanto pelo remetente quanto pelo destinatário. Defina a classe de mensagem no projeto Messages. Crie um novo projeto de Biblioteca de Classes chamado Messages e adicione-o à solução.

Defina a mensagem:

Dentro do projeto Messages, crie uma nova classe chamada 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

Tanto no projeto do remetente quanto no do destinatário, inclua uma referência ao projeto de mensagens.

Configure o endpoint do NServiceBus no projeto Sender para usar o RabbitMQ na entrega de mensagens.

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

Configuração do endpoint: o endpoint é inicializado com o nome "SenderEndpoint" chamando new EndpointConfiguration("SenderEndpoint").

endpointConfiguration é a configuração de transporte. Ao conectar-se a uma instância local do RabbitMQ, o método UseTransport() configura o NServiceBus para usar o RabbitMQ como mecanismo de transporte.

Filas de auditoria e de erros: Para onde enviar mensagens com falha e para onde auditar mensagens processadas é configurado usando SendFailedMessagesTo("error") e AuditProcessedMessagesTo("audit"), respectivamente.

Mensagem enviada: endpointInstance.Send("ReceiverEndpoint", message) envia uma GeneratePdfMessage para o "ReceiverEndpoint".

Configure o receptor para gerar PDFs.

Configure o endpoint NServiceBus no projeto Receiver para aceitar mensagens via RabbitMQ e gerar PDFs usando o IronPDF.

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

Essa configuração, para o endpoint receptor "ReceiverEndpoint", é comparável à configuração do remetente.

Manipulador de mensagens

No projeto Receiver, crie uma nova classe chamada 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 usa a interface IHandleMessages para lidar com mensagens do tipo GeneratePdfMessage.

NServiceBus C# (Como funciona para desenvolvedores): Figura 8 - Exemplo de saída do console

Método de tratamento: Após receber a mensagem, a função Handle cria um PDF usando o IronPDF. O conteúdo HTML da mensagem é convertido em PDF pelo código de renderização HtmlToPdf, que então o salva no caminho de saída designado.

NServiceBus C# (Como funciona para desenvolvedores): Figura 9 - Saída em PDF ao usar NServiceBus com RabbitMQ e IronPDF

Conclusão

O NServiceBus pode ser integrado ao RabbitMQ e ao IronPDF em C# para fornecer uma solução escalável e estável para sistemas distribuídos que precisam gerar PDFs de forma dinâmica e confiável. Essa combinação utiliza os recursos de processamento de mensagens do NServiceBus, a confiabilidade e adaptabilidade do RabbitMQ como agente de mensagens e as robustas ferramentas de edição de PDF do IronPDF. A arquitetura resultante garante o desacoplamento entre os serviços, permitindo evolução autônoma e escalabilidade.

O RabbitMQ também garante a entrega de mensagens mesmo em caso de falhas de rede ou de aplicativos. O NServiceBus simplifica o roteamento e o processamento de mensagens, e o IronPDF permite converter texto HTML em documentos PDF de alta qualidade. Essa integração oferece uma estrutura flexível para o desenvolvimento de aplicações sofisticadas e de grande escala, além de melhorar a capacidade de manutenção e a confiabilidade do sistema.

Por fim, ao adicionar o IronPDF e o Iron Software ao seu conjunto de ferramentas de programação .NET , você poderá trabalhar de forma eficaz com códigos de barras, gerar PDFs, realizar OCR e integrar com o Excel. A página de licenciamento do IronPDF , que começa em $799, combina perfeitamente seus recursos com o desempenho, a compatibilidade e a facilidade de uso do conjunto flexível do site oficial da Iron Software, para fornecer aplicativos e recursos da web adicionais e um desenvolvimento mais eficiente.

Se existirem opções de licenciamento bem definidas e personalizadas para os requisitos específicos do projeto, os desenvolvedores podem selecionar o modelo ideal com confiança. Esses benefícios permitem que os desenvolvedores lidem com uma série de dificuldades de forma eficaz e transparente.

Perguntas frequentes

Como posso usar o NServiceBus em C# para desenvolvimento de sistemas distribuídos?

O NServiceBus simplifica o desenvolvimento de sistemas distribuídos em C# ao abstrair a arquitetura de mensagens. Isso permite que os desenvolvedores se concentrem na lógica de negócios, garantindo o tratamento e a entrega confiáveis de mensagens entre os microsserviços.

Quais são os benefícios de integrar o NServiceBus com bibliotecas de gerenciamento de PDF?

A integração do NServiceBus com bibliotecas de gerenciamento de PDF, como o IronPDF, permite a geração e o gerenciamento eficientes de PDFs em aplicações distribuídas, possibilitando sistemas de software escaláveis e de fácil manutenção.

Como configurar um projeto C# com NServiceBus e RabbitMQ?

Para configurar um projeto C# com NServiceBus e RabbitMQ, crie um novo Aplicativo de Console no Visual Studio, instale os pacotes NuGet do NServiceBus e do RabbitMQ e configure o endpoint e o transporte de mensagens no seu código.

Como o NServiceBus aprimora a comunicação baseada em mensagens?

O NServiceBus aprimora a comunicação baseada em mensagens, fornecendo padrões de mensagens confiáveis, como o modelo de publicação/assinatura e o gerenciamento de sagas, garantindo que as mensagens sejam entregues e processadas corretamente em sistemas distribuídos.

Qual o papel do IronPDF em sistemas distribuídos que utilizam o NServiceBus?

O IronPDF desempenha um papel crucial em sistemas distribuídos que utilizam o NServiceBus, oferecendo recursos robustos de geração e manipulação de PDFs, que podem ser integrados a fluxos de trabalho orientados a mensagens para automatizar os processos de gerenciamento de documentos.

Como garantir a geração confiável de PDFs em sistemas distribuídos usando C#?

A geração confiável de PDFs em sistemas distribuídos usando C# pode ser alcançada integrando o NServiceBus para o tratamento de mensagens e o IronPDF para a geração de PDFs, aproveitando os recursos de mensagens do RabbitMQ para coordenar tarefas e garantir a consistência.

Como funciona o modelo de publicação/assinatura no NServiceBus?

No NServiceBus, o modelo de publicação/assinatura permite que os serviços publiquem eventos aos quais outros serviços podem se inscrever. Isso possibilita uma arquitetura orientada a eventos, na qual as mudanças em um componente podem desencadear ações em outros, melhorando a capacidade de resposta e a escalabilidade do sistema.

Qual a importância do gerenciamento de sagas no NServiceBus?

O gerenciamento de sagas no NServiceBus é fundamental para coordenar processos de negócios de longa duração em vários serviços, garantindo que fluxos de trabalho complexos sejam executados de forma correta e consistente em sistemas distribuídos.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim