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/j0PXlxJzdqU


Suggestions, questions and development help are welcomed.

Last edited Jan 23, 2013 at 2:56 AM by mimere, version 13