Zebus alternatives and similar packages
Based on the "Distributed Computing" category.
Alternatively, view Zebus alternatives based on common mentions on social networks and blogs.
-
Akka.net
Canonical actor model implementation for .NET with local + distributed actors in C# and F#. -
Online Store Modular Monolith
DISCONTINUED. š Implementing an āonline storeā modular monolith application with domain-driven design and CQRS with using in-memory message broker based on .Net Core. -
.NEXT Raft
Raft implementation for .NET and ASP.NET Core that allows to build clustered microservices powered by distributed consensus and replication
WorkOS - The modern identity platform for B2B SaaS
* 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 Zebus or a related project?
README
Zebus
Zebus is a lightweight peer to peer service bus, built with CQRS principles in mind. It allows applications to communicate with each other in a fast and easy manner. Most of the complexity is hidden in the library and you can focus on writing code that matters to you, not debugging messaging code.
Introduction
Zebus is peer to peer, so it does not depend on a broker to dispatch messages between the peers. This allows it to reach a throughput of 140k msg/s and a roundtrip latency under 500Āµs (have a look at the Performance page for details).
It is resilient thanks to the absence of a broker and an optional persistence feature that ensures that messages are not lost if a peer is down or disconnected.
It is stable, since we have been using it on a production environment at Abc Arbitrage for more than six years, handling hundreds of millions of messages per day.
Key concepts
Peer
We call a peer any program that is connected to the bus, a peer is identified by a unique identifier called a PeerId that looks like this: MyAmazingPeer.0
(we use this convention to identify different instances of the same service).
Event
An event is sent by a peer to notify everyone who is interested that something happened (ex: MyBusinessObjectWasSaved
, AlertTriggered
...).
Command
A command is sent to a peer asking for an action to be performed (ex: SaveMyBusinessObjectCommand
).
Message Handler
A class deriving from IMessageHandler<T>
will be scanned by the bus and will be used to handle messages of the T
kind on reception.
Bus
The piece of code that is the point of entry to use Zebus, the methods that you will use the most are Publish(IEvent)
and Send(ICommand)
.
A quick demo
On startup, the bus will scan your assemblies for message handlers and notify the other peers that you are interested by those messages. When a peer publishes a message, it will use the Directory to know who handles it and send the message directly to the correct recipients.
Receiver
public class MyHandler : IMessageHandler<MyEvent>
{
public void Handle(MyEvent myEvent)
{
Console.WriteLine(myEvent.Value);
}
}
Sender
public void MethodThatSends(IBus bus)
{
bus.Publish(new MyEvent { Value = 42 });
}
Event description
[ProtoContract]
public class MyEvent : IEvent
{
[ProtoMember(1)]
public int Value { get; set; }
}
And you're set ! This is all the code you need to send an event from one machine to the other. If you want to read more about how the magic happens, have a look at the wiki. Or if you want a more detailed walkthrough (what to reference, how to start the Bus...) visit the Quick start page.
Requirements
On Windows, you will need to have Microsoft Visual C++ 2017 Redistributable installed in order to load the x86 or the x64 version of libzmq
embedded in the project.
Release notes
We try to stick to the semantic versioning principles and keep the release notes and directory release notes up to date.
Other repositories
- Zebus.MessageDsl - a DSL which simplifies the writing of ProtoBuf contracts for Zebus
- Zebus.TinyHost - a lightweight host used to run Zebus enabled services
- Zebus.Samples - miscellaneous samples that show how to get started with Zebus
Copyright
Copyright Ā© 2019 Abc Arbitrage Asset Management
License
Zebus is licensed under MIT, refer to LICENSE.md for more information.
Tools
We use
*Note that all licence references and agreements mentioned in the Zebus README section above
are relevant to that project's source code only.