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 job processing in .NET and .NET Core applications. No Windows Service or separate process required -
CAP
Distributed transaction solution in micro-service base on eventually consistency, also an eventbus with Outbox pattern -
NServiceBus
Build, version, and monitor better microservices with the most powerful service platform for .NET -
Kafka Client
DISCONTINUED. .Net implementation of the Apache Kafka Protocol that provides basic functionality through Producer/Consumer classes. -
SlimMessageBus
Lightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers. -
Silverback
Silverback is a simple but feature-rich message bus for .NET core (it currently supports Kafka, RabbitMQ and MQTT). -
Enqueue It
Easy and scalable solution for manage and execute background tasks seamlessly in .NET applications. It allows you to schedule, queue, and process your jobs and microservices efficiently.
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
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();
}
}