Description
A highly configurable free open-source enterprise service bus that provides you with a mechanism to create Autonomous Business Components that are loosely coupled. This enables you to develop and deploy specific business functionality that can be independently versioned.
Shuttle.Esb alternatives and similar packages
Based on the "Queue" category.
Alternatively, view Shuttle.Esb alternatives based on common mentions on social networks and blogs.
-
Hangfire
An easy way to perform background processing in your .NET and .NET Core applications. No Windows Service or separate process required. -
MassTransit
MassTransit is lean service bus implementation for building loosely coupled applications using the .NET Framework. -
Confluent's .NET Client for Apache KafkaTM
Confluent's Apache Kafka .NET client -
RabbitMQ.NET
Implementation of an AMQP client library for C#, and a binding exposing AMQP services via WCF -
Rebus
Rebus is a lean service bus implementation for .NET, similar in nature to NServiceBus and MassTransit, only leaner -
Kafka Client
.Net implementation of the Apache Kafka Protocol that provides basic functionality through Producer/Consumer classes. -
Gofer.NET
Easy C# API for Distributed Background Tasks/Jobs for .NET Core. Inspired by celery for python. -
AdaskoTheBeAsT.MediatR.SimpleInjector and AdaskoTheBeAsT.MediatR.SimpleInjector.AspNetCore
MediatR extension for SimpleInjector with samples for ASP.NET Core and full ASP.NET
Pixel-Perfect Multi-Platform Applications with C# and XAML
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest. Visit our partner's website for more details.
Do you think we are missing an alternative of Shuttle.Esb or a related project?
README
Shuttle.Esb
A highly flexible and free .NET open-source enterprise service bus.
Documentation
There is extensive documentation on our site and you can make use of the samples to get you going.
Overview
Start a new Console Application project and select a Shuttle.Esb queue implementation from the [supported queues]({{ site.baseurl }}/packages/#queues):
Install-Package Shuttle.Esb.Msmq
Now we'll need select one of the supported containers:
Install-Package Shuttle.Core.Autofac
We'll also need to host our endpoint using the service host:
Install-Package Shuttle.Core.ServiceHost
Next we'll implement our endpoint in order to start listening on our queue:
internal class Program
{
private static void Main()
{
ServiceHost.Run<Host>();
}
}
public class Host : IServiceHost
{
private IServiceBus _bus;
public void Start()
{
var containerBuilder = new ContainerBuilder();
var registry = new AutofacComponentRegistry(containerBuilder);
ServiceBus.Register(registry);
var resolver = new AutofacComponentResolver(containerBuilder.Build());
_bus = ServiceBus.Create(resolver).Start();
}
public void Stop()
{
_bus.Dispose();
}
}
A bit of configuration is going to be needed to help things along:
<configuration>
<configSections>
<section name="serviceBus" type="Shuttle.Esb.ServiceBusSection, Shuttle.Esb"/>
</configSections>
<serviceBus>
<inbox
workQueueUri="msmq://./shuttle-server-work"
deferredQueueUri="msmq://./shuttle-server-deferred"
errorQueueUri="msmq://./shuttle-error" />
</serviceBus>
</configuration>
Send a command message for processing
using (var bus = ServiceBus.Create(resolver).Start())
{
bus.Send(new RegisterMemberCommand
{
UserName = "Mr Resistor",
EMailAddress = "[email protected]"
});
}
Publish an event message when something interesting happens
using (var bus = ServiceBus.Create(resolver).Start())
{
bus.Publish(new MemberRegisteredEvent
{
UserName = "Mr Resistor"
});
}
Subscribe to those interesting events
resolver.Resolve<ISubscriptionManager>().Subscribe<MemberRegisteredEvent>();
Handle any messages
public class RegisterMemberHandler : IMessageHandler<RegisterMemberCommand>
{
public void ProcessMessage(IHandlerContext<RegisterMemberCommand> context)
{
Console.WriteLine();
Console.WriteLine("[MEMBER REGISTERED] : user name = '{0}'", context.Message.UserName);
Console.WriteLine();
context.Publish(new MemberRegisteredEvent
{
UserName = context.Message.UserName
});
}
}
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();
}
}