Publish-subscribe messaging mechanisms are a fundamental component of distributed systems. The notion of pub-sub has been around since the very early days of computer science and has become increasingly popular in the last few years with the emergence of internet messaging infrastructures such as Twitter, Facebook, Google’s PubSubHubHub or RSS cloud.
Despite of the popularity of these types of messaging, we still don’t have a native pub-sub infrastructure in the Windows platform. Products like BizTalk Server have enabled pub-sub mechanisms in a very traditional way as part of its infrastructure but haven’t provided a foundation that can be seamlessly used by any .NET application.
Hermes was born as part of one of our recent projects at Tellago in which we needed to provide a high performance, highly interoperable pub-sub infrastructure that could be used in a variety of event-based systems. After our initial release, we decided to refactor and make this technology available to the developer community in the form of an open source package.
Hermes enables a very simple model to implement the foundation of pub-sub applications. The following figure illustrates the basic of Hermes model.
The current version of Hermes includes the following components:
- Topics: Topics are a name that categorizes a specific piece of information. Examples of topics could be: Errors, News, Alerts, etc.
- Publishers: A publisher is an entity that publishes information about a specific topic
- Subscribers: A subscriber is an entity that is interested on certain information about a specific topic. Subscribers interact with Hermes by creating a subscription which is nothing but filter criteria over a specific topic.
- Subscriptions: The easiest way to define a subscription is Subscription= Topic + Filter. As simple as that, a subscription gets created by specifying a filter expression over a specific topic. Subscriptions examples could, Critical Errors, or Economy News.
- Filters: Filters are Boolean expressions that are executed against the messages for a specific topic or topic group.
- Topic Groups: Topic groups are entities that group different topics under a single name. This allows publishers to distribute information that matches a variety of topics.
In order to enable the interaction between publishers and subscribers Hermes enables a series of APIs 100% based on the concepts of the Representational State Transfer (REST).
- Subscription Management API: This API will be used by publishers and subscribers to create, renew and manage the different topics and topic groups.
- Publisher API: Using this API, authorized applications will publish data to specific topics.
- Subscriber API: This API will be used by subscriber applications to retrieve information from specific subscriptions.
Hermes was built under a very simple set of principles: simplicity, interoperability and high scalability. We achieved simplicity and interoperability by exposing the Hermes infrastructure through a set of very lightweight RESTFul Service APIs built using the upcoming WCF. In order to achieve our expected levels of scalability we decided to rely on MongoDB as the fundamental message repository for Hermes. The used of MongoDB made it extremenly easy to store, partition and index high volumes of messages for a large number of topics and subscriptions.
Today’s release is just a small glimpse of what we have planed for Hermes. We have been prototipying a lot of ideas and are also planning to incorporate some of the community feedback. Here are some of the things you can expect to see in Hermes soon:
- Management Portal: We are planning on enabling the core management capabilities of Hermes through a web interface to make it easier for IT professional to interact with the system.
- Cloud deployment: Wouldn’t it be cool if we could have the same messaging infrastructure working on-premise and on the cloud? We are planning on enabling Hermes infrastructure on Windows Azure and Amazon EC2.
- New messaging patterns: We are planning to incorporate new messaging patterns that makes it even easier for applications to interact with each other using pub-sub mechanisms.
How to get Hermes?
You can get Hermes bits and source code in our Github repository. Please give it a try to send us some feedback.