Library for messaging between services.
| Travis | |
|---|---|
| Infrastructure.Messaging |
| Packages | Travis |
|---|---|
| Infrastructure.Messaging | ![]() |
| Infrastructure.Messaging.DependencyInjection | ![]() |
| Infrastructure.Messaging.RabbitMQ | ![]() |
| Infrastructure.Messaging.InMemory | ![]() |
- .NETStandard 2.1
- Microsoft.Extensions.DependencyInjection (>= 3.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 3.0.0)
- System.Text.Json (>= 4.6.0)
Register Messaging via .AddMessaging() extension method provided by Infrastructure.Messaging.Extensions.DependencyInjection package.
varrabbitMQUri=configuration.GetSection("RabbitMq")["uri"];varserviceProvider=newServiceCollection().AddLogging(lb =>lb.AddConsole()).AddMessaging(mc =>{mc.UseRabbitMQ(cf =>cf.Uri=newUri(rabbitMQUri));mc.UseJsonPacker(jso =>jso.PropertyNamingPolicy=JsonNamingPolicy.CamelCase);}, sc =>sc.AddSingleton<IMessageHandler<TestMessage>,TestMessageHandler>().AddSingleton<IMessageHandler<TestMessageWithEventId>,TestMessageHandler>()).BuildServiceProvider();Implement handlers.
publicsealedclassTestMessageHandler:IMessageHandler<TestMessage>,IMessageHandler<TestMessageWithEventId>{privatereadonlyILogger<TestMessageHandler>_logger;publicTestMessageHandler(ILogger<TestMessageHandler>logger){_logger=logger;}publicasyncTaskHandle(TestMessagemessage,CancellationTokencancellationToken){awaitTask.Delay(100);_logger.LogInformation("Test message was dispached {message}",message.Ping);thrownewException("AASDSD");}publicTaskHandle(TestMessageWithEventIdmessage,CancellationTokencancellationToken){_logger.LogInformation("TestMessageWithEventId was dispatched. {eventId}, {text}",message.EventId,message.Text);returnTask.CompletedTask;}}Use IMessageRouter.Route() to start the routing process and IMessagePublisher.Publish(IMessage message) to publish a message.
publicasyncTaskMain(){CancellationTokenSource=newCancellationTokenSource();//..MessageRouter=serviceProvider.GetRequiredService<IMessageRouter>();Publisher=serviceProvider.GetRequiredService<IMessagePublisher>();//..awaitPublisher.Publish(newTestMessage{Ping="A"},cancellationToken:CancellationTokenSource.Token);// ..awaitMessageRouter.Route(cancellationToken:CancellationTokenSource.Token);}



