Messaging Paradigms supported by Nirvana

Nirvana supports three broad messaging paradigms - Publish/Subscribe, Message Queues and Peer to Peer. Nirvana clients can use a mixture of these paradigms from a single session. In addition to this it is possible for clients to further control the conversation that takes place with the server by choosing particular styles of interaction. These styles are available to both readers and writes of messages and include asynchrounous, synchrounous, transactional and non-transactional.

Publish/Subscribe (using Channels/Topics)

Publish/Subscribe is an asynchronous messaging model where the sender (publisher) of a message and the consumer (subscriber) of a message are decoupled. When using the Chanels/Topics readers and writes of events are both connected to a common topic or channel. The publisher publishes data to the channel. The channel exists with the Nirvana realm server. As messages arrives on a channel the server automatically sends them onto all consumers subscribed to the channel. Nirvana supports multiple publishers and subscribers on a single channel.

Learn more about publish/subscribe with channels in:

Publish/Subscribe (using DataStreams and DataGroups)

Nirvana DataGroups provide an alternative to Channels/Topics for Publish/Subscribe. Using DataGroups it is possible for remote processes to manage subscriptions on behalf subscribers. The process of managing subscribers can be carried out by publishers themselves or by some other process. DataGroups are lightweight in nature and are designed to support large numbers of users whose subscriptions are fluid in nature. The addition / removal of users from DataGroups can be entirely transparent from the user perspective.

Learn more about publish/subscribe with DataGroups in:

Message Queues

Like pub/sub, message queues decouple the publisher or sender of data from the consumer of data. The Nirvana realm server manages the fan out of messages to consumers. Unlike pub/sub with channels, however, only one consumber can read a message from a queue. If more than one consumer is subscribed to a queue then the messages are distributed in a round-robin fashion.

Learn more about queues in:

Peer to Peer

Peer to Peer provides a direct communications path between an instance of a service and the client requiring access to the service. The Nirvana realm server brokers the relationship between the service and the client and in doing so becomes transparent as messages pass through it.

Learn more about peer to peer services in:

Messaging Paradigms Comparison

DataGroups Channels Queues Peer to Peer
Subscriptions Managed Remotely yes N/A N/A N/A
Nestable yes N/A N/A N/A
Clusterable yes yes yes N/A
Persistence (data) N/A yes yes N/A
Persistence (state) yes yes yes N/A
Message Replay yes yes yes yes
Synchronous Consumer N/A yes yes N/A
Asynchronous Consumer yes yes yes yes
Synchronous Producer yes yes yes N/A
Asynchronous Producer yes yes yes yes
Transactional Consumer N/A yes yes N/A
Non-Transactional Consumer yes yes yes yes
Transactional Producer N/A yes yes N/A
Non-Transactional Producer yes yes yes yes
Destructive Read N/A N/A yes yes
Delta Delivery yes yes N/A N/A
Conflation (Event Merge) yes N/A N/A N/A
Conflation (Event Overwrite) yes N/A N/A N/A
Conflation (Throttled Delivery) yes N/A N/A N/A
User Specified Filters N/A yes yes N/A
Addressable Messages N/A yes yes yes
User Access Controlled via ACLs N/A yes yes yes
Microsoft Reactive Extensions N/A yes yes N/A
Accessible via JMS N/A yes yes N/A
Accessible via AMQP N/A yes yes N/A