ermeX is a fast library implementing a Service Bus with a minimal usage complexity.
A set of connected ermeX components is an ermeX Network.
NuGet it
https://nuget.org/packages?q=ermeX
What is it?
ermeX is a fast library implementing a
Service Bus with a minimal usage complexity.
A set of connected ermeX components is an
ermeX Network
What does it do?

* ermeX allows you to request services and subscribe to messages without having configuration nightmares
* With ermeX you can call remote objects like if they were local and you can implement distributed message queues in the simplest way.
* To deploy ermeX you just need the dll referenced in your project and you dont need any third party tool like MSMQ, databases installed... and the message delivery is guaranteed
* All ermeX functionallity is achieved from only one static class, called
WorldGate .
How to use it?
Please, take a look at the QuickStart
* Reference the ermeX.dll (or nuGet it!!)
* Configure ermeX on your component startup with the ip and port of another component using ermeX and your listening port
Configuration cfg = Configuration.Configure(ComponentId).ListeningToTcpPort(6666)
.RequestJoinTo(remoteIP,remotePort,remoteComponentId);
WorldGate.ConfigureAndStart(cfg); //after this you are in the ermeX network
* Publish your messages to the ermeX Network
...
WorldGate.Publish(message); //message can be any object
...
* Subscribe to messages: the subscription to messages can be discovered automatically by configuration(recommended), or done explicitly returning the handler instance for example:
//first declare the handler
//AlarmsMessagesHandler implements the key interface IHandleMessages<AlarmMessage>.
public class AlarmsMessagesHandler: IHandleMessages<AlarmMessage>
{...}
...
//after the following line, your ermeX component will handle all the
//messages of type AlarmsMessage and inheritors published in its ermeX Network
var handler = receiver.Suscribe<AlarmsMessagesHandler>(); //this call returns the instance that will handle the messages.
//The preferred option is the auto-discovery by config
...
* Publish your services: same as the messages subscriptions, the services can be auto discovered by configuration(recommended), or published explicitly.
Note that the interface must be in a referenced assembly when needed by the caller. this and the attributes will be simplified in the future, keeping the backwards compatibility
...
//First create your service interface
[ServiceContract("D6AA6A10-E8BC-4854-AEE8-7AEEDF2C6B1D")]
public interface IMyService : IService //an ermeX service Implements the empty interface IService
{
[ServiceOperation("D314C873-2E7A-4C4C-8A2E-06ED6BA49FDB")]
MyResultType MyMethod(MyBizData theData);
}
...
//Now implement your interface
public class MyServiceImpl:IMyService
{...}
...
//Lets publish MyService explictly here.
WorldGate.RegisterService(typeof (MyService));//Auto discovery is the preferred option
...
* Call services: as mentioned before, you need the assembly containing the service interface referenced by your component
...
MyBizData data = new MyBizData(){...} //in this case the service has a parameter
...
var myService = WorldGate.GetServiceProxy<IMyService>(); //first we get the proxy
MyResultType result= myService.MyMethod(data); //then we invoke the service. we dont need to know who provides it as it can be published by any component in the ermeX Network
...
Goals
#
Multiplatform: Not only for .net(MS and MONO). ermeX roadmap will bring ermeX available through most of the development platforms and programming languages
#
Self contained: No need of pre-requirements installed, just reference it in your project and use it
#
Easy to use: Simplest configuration, simplest usage
#
Fast: one of ermeX Devs main goals is the performance
#
Continuous improvement
Features
The current version covers the following features:
# Subscribe to messages
# Publish messages to subscribers
# Publish services
# Request services
For detailed instructions about the usage please see the
Wiki section.
How can we improve it?
Please tell us here: {url:https://groups.google.com/forum/?fromgroups#!forum/forum-ermex}
Do you want to join ermeX development?
Please apply here
https://groups.google.com/forum/?fromgroups=#!topic/forum-ermex/j0PXlxJzdqUSuggestions, questions and development help are welcomed.