QsMessaging ist eine .NET 8-Bibliothek zum Senden und Empfangen von Nachrichten zwischen Diensten oder Komponenten Ihrer Anwendung mithilfe von RabbitMQ . Es unterstützt horizontale Skalierbarkeit, sodass mehrere Instanzen desselben Dienstes Nachrichten effizient verarbeiten können.
Verfügbar auf NuGet für eine nahtlose Integration:
Eine einfache, skalierbare Messaging-Lösung für verteilte Systeme.
Installieren Sie das Paket mit dem folgenden Befehl:
dotnet add package QsMessaging
Die Registrierung der Bibliothek ist einfach. Fügen Sie die folgenden zwei Codezeilen zu Ihrer Program.cs
hinzu:
// Add QsMessaging (use the default configuration)...
builder . Services . AddQsMessaging ( options => { } ) ;
.. .
await host . UseQsMessaging ( ) ;
RabbitMQ
localhost
guest
guest
5672
Definieren Sie einen Nachrichtenvertrag:
public class RegularMessageContract
{
public required string MyTextMessage { get ; set ; }
}
Integrieren Sie IQsMessaging
in Ihre Klasse:
public YourClass ( IQsMessaging qsMessaging ) { }
Verwenden Sie es dann, um eine Nachricht zu senden:
await qsMessaging . SendMessageAsync ( new RegularMessageContract { MyTextMessage = "My message." } ) ;
Um die Nachricht zu verarbeiten, erstellen Sie einen Handler:
public class RegularMessageContractHandler : IQsMessageHandler < RegularMessageContract >
{
public Task < bool > Consumer ( RegularMessageContract contractModel )
{
// Process the message here
return Task . FromResult ( true ) ;
}
}
Sie können das Request/Response- Muster auch verwenden, um eine Anfrage zu senden und auf eine Antwort zu warten. Dies ist nützlich, wenn Sie zwischen Diensten kommunizieren müssen und eine Antwort erwarten.
Definieren Sie die Anfrage- und Antwortverträge:
public class MyRequestContract
{
public required string RequestMessage { get ; set ; }
}
public class MyResponseContract
{
public required string ResponseMessage { get ; set ; }
}
Um eine Anfrage zu senden und auf eine Antwort zu warten, verwenden Sie RequestResponse<TRequest, TResponse>
:
public class MyService
{
private readonly IQsMessaging _qsMessaging ;
public MyService ( IQsMessaging qsMessaging )
{
_qsMessaging = qsMessaging ;
}
public async Task < MyResponseContract > SendRequestAsync ( MyRequestContract request )
{
var response = await _qsMessaging . SendRequestResponseAsync < MyRequestContract , MyResponseContract > ( request ) ;
return response ;
}
}
Um Anfragen zu verarbeiten, implementieren Sie die Schnittstelle IQsRequestResponseHandler<TRequest, TResponse>
:
public class MyRequestHandler : IQsRequestResponseHandler < MyRequestContract , MyResponseContract >
{
public Task < MyResponseContract > Handle ( MyRequestContract request )
{
// Process the request and create a response
return Task . FromResult ( new MyResponseContract { ResponseMessage = "Response to: " + request . RequestMessage } ) ;
}
}
Das ist alles, Leute!
Eine ausführliche Dokumentation finden Sie im QsMessaging-Wiki.