= Topic-Based Messaging With Apache Ignite

== Overview

Ignite distributed messaging enables topic-based cluster-wide communication between all nodes. Messages via a specified
message topic can be distributed to all or sub-group of nodes that have subscribed to that topic.

Ignite messaging is based on the publish-subscribe paradigm where publishers and subscribers are tethered together with
a common topic. When one of the nodes sends a message `A` for topic `T`, it is published on all nodes that have subscribed to `T`.

[NOTE]
====
[discrete]
Any new node joining the cluster automatically gets subscribed to all the topics that other nodes in the cluster
(or link:distributed-computing/cluster-groups[cluster group]) are subscribed to.
====

== IgniteMessaging

Distributed messaging functionality in Ignite is available via the `IgniteMessaging` interface. You can get an instance
of `IgniteMessaging` like so:

[tabs]
--
tab:Java[]
[source, java]
----
Ignite ignite = Ignition.ignite();

// Messaging instance over this cluster.
IgniteMessaging msg = ignite.message();

// Messaging instance over given cluster group (in this case, remote nodes).
IgniteMessaging rmtMsg = ignite.message(ignite.cluster().forRemotes());
----
--

== Publish Messages

Send methods help sending/publishing messages with a specified message topic to all nodes. Messages can be sent
in _ordered_ or _unordered_ manner.

=== Ordered Messages

The `sendOrdered(...)` method can be used if you want to receive messages in the order they were sent. The timeout parameter
is passed to specify how long a message will stay in the queue to wait for messages that are supposed to be sent before
this message. If the timeout expires, then all the messages that have not yet arrived for a given topic on that node will be ignored.

=== Unordered Messages

The `send(...)` methods do not guarantee message ordering. This means that, when you sequentially send message `A` and
message `B`, you are not guaranteed that the target node first receives `A` and then `B`.

== Subscribe for Messages

Listen methods help to listen/subscribe for messages. When these methods are called, a listener with specified message
topic is registered on  all (or sub-group of ) nodes to listen for new messages. With listen methods, a predicate is
passed that returns a boolean value which tells the listener to continue or stop listening for new messages.

=== Local Listen

The `localListen(...)` method registers a message listener with specified topic only on the local node and listens for
messages from any node in the _given_ cluster group.

=== Remote Listen

The `remoteListen(...)` method registers message listeners with specified topic on all nodes in the _given_ cluster group
and listens for messages from any node in _this_ cluster group.

== Example

[tabs]
--
tab:Java[]
[source, java]
----
Ignite ignite = Ignition.ignite();

IgniteMessaging rmtMsg = ignite.message(ignite.cluster().forRemotes());

// Add listener for ordered messages on all remote nodes.
rmtMsg.remoteListen("MyOrderedTopic", (nodeId, msg) -> {
    System.out.println("Received ordered message [msg=" + msg + ", from=" + nodeId + ']');

    return true; // Return true to continue listening.
});

// Send ordered messages to remote nodes.
for (int i = 0; i < 10; i++)
    rmtMsg.sendOrdered("MyOrderedTopic", Integer.toString(i),0);
----
--
