Przejdź do treści stopki
POMOC .NET

NServiceBus C# (jak to działa dla programistów)

NServiceBus to potężna i elastyczna magistrala usług zaprojektowana dla platformy .NET Framework, która usprawnia tworzenie systemów rozproszonych. Oferowane przez nią solidne wzorce komunikacyjne gwarantują niezawodną obsługę i dostarczanie komunikatów w wielu mikrousługach i aplikacjach. NServiceBus abstrahuje podstawową architekturę komunikacyjną, pozwalając programistom skupić się na logice biznesowej zamiast na zawiłościach tworzenia systemów rozproszonych.

Natomiast IronPDF to popularna biblioteka .NET służąca do generowania, przeglądania i modyfikowania plików PDF. Jest znane z łatwości obsługi i wysokiej wydajności w tworzeniu plików PDF z różnych źródeł, takich jak pliki ASPX i HTML.

Dzięki połączeniu NServiceBus i IronPDF programiści mogą tworzyć niezawodne, skalowalne i łatwe w utrzymaniu systemy oprogramowania, które mogą generować dokumenty PDF i zarządzać nimi w ramach działalności biznesowej.

W tym artykule przyjrzymy się, jak skonfigurować prosty projekt C# NServiceBus i zintegrować go z IronPDF, abyś mógł zbudować usprawniony przepływ pracy do zarządzania i tworzenia dokumentów PDF w architekturze aplikacji rozproszonej. Po przeczytaniu tego wprowadzającego samouczka powinieneś dokładnie wiedzieć, w jaki sposób te dwie skuteczne technologie mogą współpracować, aby uprościć zadania związane z plikami PDF w środowisku rozproszonym.

Czym jest NServiceBus C#?

NServiceBus to potężny i elastyczny framework, który ułatwia tworzenie systemów rozproszonych i architektur .NET Framework zorientowanych na usługi. Korzystając z NServiceBus, można łatwo zarządzać różnymi typami komunikatów i zapewnić niezawodną komunikację. Ma to kluczowe znaczenie, szczególnie w aplikacjach internetowych i podobnych architekturach, gdzie niezbędne jest płynne kierowanie i przetwarzanie komunikatów. Moduły obsługi komunikatów NServiceBus skutecznie radzą sobie z odbieraniem komunikatów, zapewniając płynną interakcję wszystkich komponentów logicznych. NServiceBus posiada następujące ważne funkcje:

NServiceBus C# (How It Works For Developers): Figure 1 - NServiceBus C#

Funkcje NServiceBus

Komunikacja oparta na komunikatach

NServiceBus wspiera komunikację opartą na komunikatach między różnymi usługami lub komponentami w systemie. Dzięki rozdzieleniu komponentów metoda ta pozwala tworzyć projekty, które łatwiej skalować i zarządzać nimi.

Niezawodna komunikacja

Dzięki automatycznemu zarządzaniu ponownymi próbami, kolejkami wiadomości nieosiągniętych adresatów i innymi technikami odporności na awarie gwarantuje niezawodne dostarczanie wiadomości. W systemach rozproszonych, gdzie często zdarzają się awarie sieci i inne problemy, ta niezawodność jest niezbędna.

Model publikowania/subskrypcji

Wzorzec publikowania/subskrypcji jest obsługiwany przez NServiceBus, umożliwiając usługom publikowanie zdarzeń i pozwalając innym usługom subskrybować te zdarzenia. Umożliwia to tworzenie architektur sterowanych zdarzeniami, w których modyfikacje wprowadzone w zdarzeniach w jednym komponencie systemu mogą wywołać reakcje w innych komponentach.

Zarządzanie sagą

Długotrwałe procesy biznesowe mogą być zarządzane za pomocą NServiceBus dzięki zintegrowanej obsłudze sag. Sagi umożliwiają platformie usługowej zarządzanie stanem i koordynowanie skomplikowanych operacji między kilkoma usługami.

Rozszerzalność i dostosowywanie

It offers an exceptional level of extensibility, enabling developers to personalize the handling, processing, and transportation process of messages. Because of its adaptability, it can be used in a variety of scenarios.

Integracja z różnymi platformami komunikacyjnymi

Wiele systemów komunikacyjnych, w tym MSMQ, RabbitMQ, Azure Service Bus, Amazon SQS i inne, można zintegrować z NServiceBus. Umożliwia to programistom wybór rozwiązania infrastruktury komunikacyjnej najlepiej odpowiadającego ich wymaganiom.

Tworzenie i konfigurowanie NServiceBus w C

Przed rozpoczęciem korzystania z NServiceBus w projekcie C# należy skonfigurować środowisko deweloperskie, utworzyć podstawowy projekt i zbudować podstawową usługę oraz scenariusz komunikacji. Oto przewodnik krok po kroku, który pomoże Ci zacząć.

Utwórz nowy projekt Visual Studio

Tworzenie projektu konsolowego w Visual Studio jest proste. Wykonaj następujące kroki w środowisku Visual Studio, aby uruchomić aplikację konsolową:

Przed użyciem upewnij się, że masz zainstalowane Visual Studio na swoim komputerze.

Rozpocznij nowy projekt

Kliknij Plik, następnie wybierz Nowy, a na koniec Projekt.

NServiceBus C# (How It Works For Developers): Figure 2 - Click New

Z listy szablonów projektów można wybrać szablon „Console App" lub „Console App (.NET Core)".

W polu "Nazwa" podaj nazwę swojego projektu.

NServiceBus C# (How It Works For Developers): Figure 3 - Provide a name and location for the project

Wybierz lokalizację przechowywania projektu.

Kliknięcie przycisku "Utwórz" spowoduje uruchomienie projektu aplikacji konsolowej.

NServiceBus C# (How It Works For Developers): Figure 4 - Click create

Instalacja pakietów NServiceBus

Przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów, aby otworzyć konsolę menedżera pakietów NuGet.

Uruchom następujące polecenie, aby zainstalować pakiet NuGet NServiceBus.

Install-Package NServiceBus

Wybór transportu

NServiceBus wymaga transportu do odbierania i wysyłania wiadomości. Użyjemy Learning Transport, ponieważ jest łatwy w użyciu i sprawdza się dobrze przy testowaniu i programowaniu.

Zainstaluj pakiet Learning Transport, wykonując następujące polecenie.

Install-Package NServiceBus.RabbitMQ

Konfigurowanie NServiceBus

Konfigurowanie punktu końcowego

Ustaw konfigurację punktu końcowego NServiceBus w pliku 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# (How It Works For Developers): Figure 5 - Example console output

Tworzenie wiadomości

Aby reprezentować wiadomość, dodaj nową klasę.

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

Tworzenie obsługi wiadomości

Aby obsłużyć wiadomość, dodaj nową klasę.

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

Wysyłanie wiadomości

Wyślij wiadomość z punktu końcowego. Dostosuj główny sposób przesyłania wiadomości przy pomocy obsługi.

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# (How It Works For Developers): Figure 6 - Example console output

Uruchom aplikację i skompiluj projekt. Konsola powinna wyświetlić komunikat „Received message: Hello, NServiceBus!"

Pierwsze kroki

Integracja NServiceBus z RabbitMQ i IronPDF w projekcie C# polega na konfiguracji wiadomości między NServiceBus i RabbitMQ oraz użyciu IronPDF do tworzenia plików PDF. Oto szczegółowy przewodnik, który pomoże Ci zacząć:

Czym jest IronPDF?

IronPDF to biblioteka .NET przeznaczona do tworzenia, odczytywania, edytowania i konwertowania plików PDF. Udostępnia programistom wydajne i intuicyjne narzędzie do pracy z plikami PDF w aplikacjach C# lub VB.NET. Cechy i możliwości IronPDF opisano szczegółowo poniżej:

NServiceBus C# (How It Works For Developers): Figure 7 - IronPDF: The C# PDF Library homepage

Funkcje IronPDF

Generowanie plików PDF z HTML

Konwertuj JavaScript, HTML i CSS do formatu PDF. Obsługuje zapytania o media i responsywny projekt, dwa współczesne standardy internetowe. Przydatne do tworzenia dynamicznie stylizowanych dokumentów PDF, faktur i raportów przy użyciu HTML i CSS.

Edycja plików PDF

Do istniejących plików PDF dodawaj tekst, obrazy i inne treści. Wyodrębnij tekst i obrazy z plików PDF. Połącz kilka plików PDF w jeden. Podziel pliki PDF na kilka dokumentów. Dodawaj adnotacje, stopki, nagłówki i znaki wodne.

Konwersja PDF

Konwertuj pliki Word, Excel, obrazy i inne formaty do PDF. Konwersja PDF do obrazu (PNG, JPEG itp.).

Wydajność i niezawodność

Wysoka wydajność i niezawodność to cele projektowe w środowiskach produkcyjnych. Sprawnie obsługuje duże dokumenty.

Instalacja IronPDF

Zainstaluj IronPDF, otwierając konsolę menedżera pakietów NuGet.

Install-Package IronPdf

Konfigurowanie nadawcy z wiadomością

Messages to współdzielony projekt (biblioteka klas), z którego będą korzystać zarówno nadawca, jak i odbiorca. Zdefiniuj klasę wiadomości w projekcie Messages. Utwórz nowy projekt biblioteki klas o nazwie Messages i dodaj go do rozwiązania.

Definicja wiadomości:

W projekcie Messages utwórz nową klasę o nazwie 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

W projektach Sender i Receiver dodaj odwołanie do projektu Messages.

Skonfiguruj punkt końcowy NServiceBus w projekcie Sender tak, aby używał RabbitMQ do dostarczania wiadomości.

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

Konfiguracja punktu końcowego: punkt końcowy jest inicjalizowany z nazwą „SenderEndpoint" poprzez wywołanie new EndpointConfiguration("SenderEndpoint").

endpointConfiguration to konfiguracja transportu. Łącząc się z lokalną instancją RabbitMQ, metoda UseTransport() konfiguruje NServiceBus do używania RabbitMQ jako mechanizmu transportu.

Kolejki błędów i audytu: miejsce docelowe dla wiadomości, które nie zostały dostarczone, oraz dla wiadomości przetworzonych do audytu jest konfigurowane odpowiednio za pomocą SendFailedMessagesTo("error") i AuditProcessedMessagesTo("audit").

Wysłana wiadomość: endpointInstance.Send("ReceiverEndpoint", message) wysyła GeneratePdfMessage do „ReceiverEndpoint".

Konfigurowanie odbiorcy do generowania plików PDF

Skonfiguruj punkt końcowy NServiceBus w projekcie Receiver, aby przyjmował wiadomości przez RabbitMQ i generował pliki PDF przy użyciu 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

Konfiguracja dla punktu końcowego odbiorcy „ReceiverEndpoint" jest analogiczna do konfiguracji nadawcy.

Obsługa wiadomości

W projekcie Receiver utwórz nową klasę o nazwie 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 używa interfejsu IHandleMessages do obsługi wiadomości typu GeneratePdfMessage.

NServiceBus C# (How It Works For Developers): Figure 8 - Example console output

Metoda Handle: Po odebraniu wiadomości funkcja Handle tworzy plik PDF przy użyciu IronPDF. Zawartość HTML zawarta w wiadomości jest konwertowana na plik PDF przez renderer HtmlToPdf, który następnie zapisuje go w określonej ścieżce wyjściowej.

NServiceBus C# (How It Works For Developers): Figure 9 - PDF output from using NServiceBus with RabbitMQ along with IronPDF

Wnioski

Integracja NServiceBus z RabbitMQ i IronPDF w C# zapewnia skalowalne i stabilne rozwiązanie dla systemów rozproszonych, które muszą dynamicznie i niezawodnie generować pliki PDF. To połączenie wykorzystuje możliwości przetwarzania wiadomości NServiceBus, niezawodność i elastyczność RabbitMQ jako brokera wiadomości oraz solidne narzędzia do edycji plików PDF w IronPDF. Wynikająca z tego architektura zapewnia rozdzielenie usług, umożliwiając autonomiczny rozwój i skalowalność.

RabbitMQ gwarantuje również dostarczanie wiadomości nawet w przypadku awarii sieci lub aplikacji. NServiceBus upraszcza routing i przetwarzanie wiadomości, a IronPDF umożliwia konwersję treści HTML na wysokiej jakości dokumenty PDF. Ta integracja oferuje elastyczne ramy do tworzenia zaawansowanych, wielkoskalowych aplikacji, a jednocześnie poprawia łatwość utrzymania i niezawodność systemu.

Dodając IronPDF i Iron Software do zestawu narzędzi do programowania w .NET, można efektywnie pracować z kodami kreskowymi, generować pliki PDF, wykonywać OCR i integrować się z programem Excel. Strona licencyjna IronPDF z cenami od $999 łączy jego funkcje z wydajnością, kompatybilnością i łatwością użytkowania elastycznego pakietu Iron Software.

Dzięki wyraźnie zdefiniowanym opcjom licencjonowania dostosowanym do konkretnych wymagań projektu programiści mogą z pewnością wybrać optymalny model. Te korzyści umożliwiają programistom efektywne i przejrzyste radzenie sobie z różnorodnymi wyzwaniami.

Często Zadawane Pytania

Jak mogę wykorzystać NServiceBus w języku C# do tworzenia systemów rozproszonych?

NServiceBus upraszcza tworzenie systemów rozproszonych w języku C# poprzez abstrakcję architektury komunikacyjnej. Pozwala to programistom skupić się na logice biznesowej, zapewniając jednocześnie niezawodną obsługę i dostarczanie komunikatów między mikrousługami.

Jakie są korzyści z integracji NServiceBus z bibliotekami do zarządzania plikami PDF?

Integracja NServiceBus z bibliotekami do zarządzania plikami PDF, takimi jak IronPDF, pozwala na wydajne generowanie i zarządzanie plikami PDF w aplikacjach rozproszonych, umożliwiając tworzenie skalowalnych i łatwych w utrzymaniu systemów oprogramowania.

Jak skonfigurować projekt C# z wykorzystaniem NServiceBus i RabbitMQ?

Aby skonfigurować projekt C# z wykorzystaniem NServiceBus i RabbitMQ, należy utworzyć nową aplikację konsolową w Visual Studio, zainstalować pakiety NuGet NServiceBus i RabbitMQ oraz skonfigurować punkt końcowy i transport komunikatów w kodzie.

W jaki sposób NServiceBus usprawnia komunikację opartą na komunikatach?

NServiceBus usprawnia komunikację opartą na komunikatach, zapewniając niezawodne wzorce komunikacyjne, takie jak model publikowania/subskrypcji oraz zarządzanie sagami, gwarantując prawidłowe dostarczanie i przetwarzanie komunikatów w systemach rozproszonych.

Jaką rolę odgrywa IronPDF w systemach rozproszonych wykorzystujących NServiceBus?

IronPDF odgrywa kluczową rolę w systemach rozproszonych wykorzystujących NServiceBus, oferując solidne możliwości generowania i edycji plików PDF, które można zintegrować z przepływami pracy opartymi na komunikatach w celu automatyzacji procesów obsługi dokumentów.

Jak zapewnić niezawodne generowanie plików PDF w systemach rozproszonych przy użyciu języka C#?

Niezawodne generowanie plików PDF w systemach rozproszonych przy użyciu języka C# można osiągnąć poprzez integrację NServiceBus do obsługi komunikatów oraz IronPDF do generowania plików PDF, wykorzystując możliwości komunikacyjne RabbitMQ do koordynacji zadań i zapewnienia spójności.

Jak działa model publikowania/subskrypcji w NServiceBus?

W NServiceBus model publikowania/subskrypcji pozwala usługom publikować zdarzenia, które mogą subskrybować inne usługi. Umożliwia to architekturę sterowaną zdarzeniami, w której zmiany w jednym komponencie mogą wywoływać działania w innych, poprawiając responsywność i skalowalność systemu.

Jakie znaczenie ma zarządzanie sagami w NServiceBus?

Zarządzanie sagami w NServiceBus ma duże znaczenie dla koordynacji długotrwałych procesów biznesowych w wielu usługach, zapewniając prawidłowe i spójne wykonywanie złożonych przepływów pracy w systemach rozproszonych.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwon do mnie