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:

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.

Z listy szablonów projektów można wybrać szablon „Console App" lub „Console App (.NET Core)".
W polu "Nazwa" podaj nazwę swojego projektu.

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

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

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
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
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

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:

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
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
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
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
GeneratePdfMessageHandler używa interfejsu IHandleMessages do obsługi wiadomości typu GeneratePdfMessage.

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.

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.




