QsMessaging est une bibliothèque .NET 8 conçue pour envoyer et recevoir des messages entre services ou composants de votre application à l'aide de RabbitMQ . Il prend en charge l'évolutivité horizontale, permettant à plusieurs instances du même service de gérer efficacement les messages.
Disponible sur NuGet pour une intégration transparente :
Une solution de messagerie simple et évolutive pour les systèmes distribués.
Installez le package à l'aide de la commande suivante :
dotnet add package QsMessaging
L'enregistrement de la bibliothèque est simple. Ajoutez les deux lignes de code suivantes à votre Program.cs
:
// Add QsMessaging (use the default configuration)...
builder . Services . AddQsMessaging ( options => { } ) ;
.. .
await host . UseQsMessaging ( ) ;
LapinMQ
localhost
guest
guest
5672
Définir un contrat de message :
public class RegularMessageContract
{
public required string MyTextMessage { get ; set ; }
}
Injectez IQsMessaging
dans votre classe :
public YourClass ( IQsMessaging qsMessaging ) { }
Ensuite, utilisez-le pour envoyer un message :
await qsMessaging . SendMessageAsync ( new RegularMessageContract { MyTextMessage = "My message." } ) ;
Pour gérer le message, créez un gestionnaire :
public class RegularMessageContractHandler : IQsMessageHandler < RegularMessageContract >
{
public Task < bool > Consumer ( RegularMessageContract contractModel )
{
// Process the message here
return Task . FromResult ( true ) ;
}
}
Vous pouvez également utiliser le modèle Demande/Réponse pour envoyer une demande et attendre une réponse. Ceci est utile lorsque vous devez communiquer entre les services et attendre une réponse.
Définir les contrats de demande et de réponse :
public class MyRequestContract
{
public required string RequestMessage { get ; set ; }
}
public class MyResponseContract
{
public required string ResponseMessage { get ; set ; }
}
Pour envoyer une requête et attendre une réponse, utilisez 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 ;
}
}
Pour gérer les requêtes, implémentez l'interface 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 } ) ;
}
}
C'est tout, les amis !
Pour une documentation détaillée, visitez le wiki QsMessaging.