-
Enterprise Service Bus libraries for .NET – Shuttle ESB
One in a series of posts giving a quick overview of ESB libraries for .NET
Shuttle ESB describes itself as a “free .NET open-source enterprise service bus”. It supports a good range of transports and integrates with a number of IoC containers.
https://github.com/Shuttle/shuttle-esb
Messages
A POCO class
Publishing
Publish using
IServiceBus
. You’ll also make use of static methods from theServiceBus
class.using (var bus = ServiceBus.Create(resolver).Start()) { bus.Publish(new MemberRegisteredEvent { UserName = "Mr Resistor" }); }
Subscribing
A handler implements
IMessageHandler
public class MemberRegisteredHandler : IMessageHandler<MemberRegisteredEvent> { public void ProcessMessage(IHandlerContext<MemberRegisteredEvent> context)
{ Console.WriteLine(); Console.WriteLine("[EVENT RECEIVED] : user name = ‘{0}’", context.Message.UserName); Console.WriteLine(); } }
You also need to tell the subscription manager that you want to subscribe to a particular event.
resolver
is a wrapper class for your specific container.resolver.Resolve<ISubscriptionManager>().Subscribe<MemberRegisteredEvent>();
-
Enterprise Service Bus libraries for .NET – Nimbus
One in a series of posts giving a quick overview of ESB libraries for .NET
Nimbus primarily supports the Azure Service Bus as a transport, so if your application is going to run in Azure, then this could be a good choice.
https://github.com/NimbusAPI/Nimbus/wiki/Publishing-an-Event-on-the-Bus
Messages
Event messages should implement
IBusEvent
Publishing
Publish with an instance of
IBus
_bus.Publish(new NewOrderReceived {CustomerName = "Ricky Bobby"});
Subscribing
Handle events by implementing
IHandleMulticastEvent
public class ListenForNewOrders : IHandleMulticastEvent { public async Task Handle(NewOrderReceived busEvent) { Console.WriteLine("I heard about a new order from " + busEvent.CustomerName); //Do more stuff } }
-
Enterprise Service Bus libraries for .NET – MassTransit
One in a series of posts giving a quick overview of ESB libraries for .NET
MassTransit is an open-source library which apparently began as a response to some perceived deficiencies in the version of NServiceBus that was around in 2007. The project did a major rewrite in 2014, introducing async support and switching from MSMQ to RabbitMQ as the preferred transport.
Messages
Messages are POCO classes. There is no requirement to inherit from any base class or implement a specific interface.
Publishing
http://masstransit-project.com/MassTransit/usage/producing-messages.html
Messages are published using
IPublishEndpoint
, which is provided byConsumeContext
for consumers or by theIBus
interfacepublic async Task NotifyOrderSubmitted(IPublishEndpoint publishEndpoint) { await publishEndpoint.Publish<OrderSubmitted>(new { OrderId = "27", OrderDate = DateTime.UtcNow, }); }
Subscribing
http://masstransit-project.com/MassTransit/usage/message-consumers.html
A subscribing class (or consumer) implements the
IConsumer<T>
interface.public class UpdateCustomerConsumer : IConsumer<UpdateCustomerAddress> { public async Task Consume(ConsumeContext<UpdateCustomerAddress> context) { await Console.Out.WriteLineAsync($"Updating customer: {context.Message.CustomerId}"); // update the customer address } }
A consumer needs to be connected to an endpoint to receive messages
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri("rabbitmq://localhost/"), h => { h.Username("guest"); h.Password("guest"); }); cfg.ReceiveEndpoint(host, "customer_update_queue", e => { e.Consumer<UpdateCustomerConsumer>(); }); });