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 by ConsumeContext
for consumers or by the IBus
interface
public 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>();
});
});
Categories: .NET