.NET Core event bus implementation supporting:
- In-memory event dispatching (publishing and subscription)
- publishing event to Amazon SNS
- publishing event to Amazon SQS
- Create a console application with the following NuGet packages installed:
> Install-Package Microsoft.Extensions.DependencyInjection
> Install-Package JKang.EventBus
- Create an event class
public class MyEvent
{
public string Message { get; set; }
}
- Optionally implement one or multiple handlers subscribing to the event
class MyEventHandler : IEventHandler<MyEvent>
{
public Task HandleEventAsync(MyEvent @event)
{
Console.WriteLine($"Received message '{@event.Message}'");
return Task.CompletedTask;
}
}
- Configure and register event bus using Dependency Injection
static void Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
services.AddEventBus(builder =>
{
builder.AddInMemoryEventBus(subscriber =>
{
subscriber.Subscribe<MyEvent, MyEventHandler>();
//subscriber.SubscribeAllHandledEvents<MyEventHandler>(); // other way
});
});
}
- Publish an event
IServiceProvider serviceProvider = services.BuildServiceProvider();
using (IServiceScope scope = serviceProvider.CreateScope())
{
IEventPublisher eventPublisher = scope.ServiceProvider.GetRequiredService<IEventPublisher>();
eventPublisher.PublishEventAsync(new MyEvent { Message = "Hello, event bus!" }).Wait();
}
-
Install NuGet package JKang.EventBus.AmazonSns
-
Configure publishing events to AWS SNS
services.AddEventBus(builder =>
{
builder
//.AddInMemoryEventBus() // uncomment to keep using in-memory event bus in the same time
.PublishToAmazonSns(x => x.Region = "eu-west-3");
});
- Optionally It's possible to customize AWS SNS topic name using annotation
[AmazonSnsTopic("my-event")]
public class MyEvent { }
-
Install NuGet package JKang.EventBus.AmazonSqs
-
Configure publishing events to AWS SQS
services.AddEventBus(builder =>
{
builder
//.AddInMemoryEventBus() // uncomment to keep using in-memory event bus in the same time
.PublishToAmazonSqs(options =>
{
options.AccessKeyId = "";
options.SecretAccessKey = "";
options.DefaultQueueUrl = "";
options.Region = "us-east-1";
});
});
- Optionally It's possible to customize AWS SQS queue url using annotation
[AmazonSqsQueue("https://sqs.ap-southeast-2.amazonaws.com/189107071895/youtube-demo")]
public class MyEvent { }
Any contributions or comments are welcome!