LightBus est une simple implémentation pour l'envoi de messages asynchrones unidireaux ou avec retour pour les applications .NET.
La bibliothèque est disponible via les packages NuGet:
Install-Package LightBus.Core
Install-Package LightBus.Microsoft.DependencyInjectiondotnet add package LightBus.Core
dotnet add package LightBus.Microsoft.DependencyInjectionSi vous utilisez ASP.NET Core, installez simplement Lightbus.microsoft.DependencyInjection, ce package vous permet de enregistrer automatiquement le gestionnaire de messages, en utilisant simplement le Sintax ci-dessous.
public void ConfigureServices ( IServiceCollection services )
{
.. .
services . AddLightBus ( ) ;
.. .
} Pour créer un message est très simple, vous avez juste besoin d'une classe et implémentez l'interface IMessage comme ci-dessous
public class SampleMessage : IMessage
{
public string Value { get ; set ; }
} Comme un message, vous avez juste besoin d'une classe et implémentez: IMessageHandler<TMessage> where TMessage: IMessage comme ci-dessous
public class SampleMessageHandler : IMessageHandler < SampleMessage >
{
public Task HandleAsync ( SampleMessage message )
{
Debug . WriteLine ( message . Value ) ;
return Task . CompletedTask ;
}
} Pour déclencher un message, vous devrez injecter l'interface ILightBus et utiliser PushAsync<TMessage>(TMessage) pour envoyer un message comme ci-dessous
[ Route ( "" ) ]
public class ValuesController : Controller
{
private readonly ILightBus _lightBus ;
public ValuesController ( ILightBus lightBus )
{
_lightBus = lightBus ;
}
[ HttpGet ]
public async Task < string > Get ( )
{
await _lightBus . PushAsync (
new SampleMessage { Value = "Hello LightBus" } ) ;
return "Ok" ;
}
} Pour créer un message est très simple, vous avez juste besoin d'une classe et implémentez l'interface IMessage<out Response> comme ci-dessous
public class SampleMessageResponse : IMessage < string >
{
public string Value { get ; set ; }
} Comme un message, vous avez juste besoin d'une classe et implémentez: IMessageHandler<TMessage, TResponse> where TMessage: IMessage<TResponse> Interface comme ci-dessous
public class SampleMessageHandler : IMessageHandler < SampleMessageResponse , string >
{
public Task < string > HandleAsync ( SampleMessageResponse message )
{
return Task . FromResult ( $ "Hello { message . Value } " ) ;
}
} Pour déclencher un message, vous devrez injecter l'interface ILightBus et utiliser Task<TResponse> SendAsync<TMessage, TResponse>(Action<TMessage> messageHandler = null) pour expédier un message comme ci-dessous
[ Route ( "" ) ]
public class ValuesController : Controller
{
private readonly ILightBus _lightBus ;
public ValuesController ( ILightBus lightBus )
{
_lightBus = lightBus ;
}
[ HttpGet ]
public async Task < string > Get ( )
{
await _lightBus . SendAsync < SampleMessageResponse , string > ( msg => msg . Value = "LightBus" ) ;
}
}