轻量化的 p2p 组件

Bertrand Blackburn 85d624af8b Add requirements section in README.md há 9 anos atrás
build 46b2f09e53 Switch build script to Cake há 9 anos atrás
lib 945f8f5ff7 Use NuGet for StructureMap, and update to v3.1.4.143 há 11 anos atrás
src e66a33eae8 Update libzmq to 4.0.8 compiled with vs2015 há 9 anos atrás
tools 786339e547 Remove Nuget.exe as it is automatically downloaded há 9 anos atrás
.gitattributes 3d9ebce80b Normalize line endings há 10 anos atrás
.gitignore 4560f29335 Ignore nuget.exe há 9 anos atrás
ClickToBuild.bat 46b2f09e53 Switch build script to Cake há 9 anos atrás
ClickToPackage.bat 3d9ebce80b Normalize line endings há 10 anos atrás
ClickToPublish.bat a72b2128a0 Update clicktopublish há 11 anos atrás
LICENSE.md b571dab224 Update Copyright notice há 9 anos atrás
NuGet.config bbb0c47d3d Move packages folders to a single one in \lib há 9 anos atrás
README.md 85d624af8b Add requirements section in README.md há 9 anos atrás
RELEASE_NOTES.md 1d3a8a47d8 Switch to version 1.5.0 há 9 anos atrás
Zebus.DotSettings 8ec3d2f40d Add Resharper common settings file há 9 anos atrás
appveyor.yml 3adae3afb1 Update AppVeyor há 10 anos atrás

README.md

#About AppVeyor branch NuGet

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 two years. Although we did not release all the necessary bricks yet so you will have to wait a few minor versions to have a fully resilient prodable product.

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++ 2015 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 up to date.

Copyright

Copyright © 2016 Abc Arbitrage Asset Management

License

Zebus is licensed under MIT, refer to LICENSE.md for more information.

Tools

We use

resharper_icon