package io.scalecube.examples;
import io.scalecube.cluster.Cluster;
import io.scalecube.transport.Message;
/**
* Basic example for member transport between cluster members to run the example Start ClusterNodeA and cluster
* ClusterNodeB A listen on transport messages B send message to member A.
*
* @author ronen hamias, Anton Kharenko
*
*/
public class MessagingExample {
/**
* Main method.
*/
public static void main(String[] args) throws Exception {
// Start cluster node Alice to listen and respond for incoming greeting messages
Cluster alice = Cluster.joinAwait();
alice.listen().subscribe(msg -> {
System.out.println("Alice received: " + msg.data());
alice.send(msg.sender(), Message.fromData("Greetings from Alice"));
});
// Join cluster node Bob to cluster with Alice, listen and respond for incoming greeting messages
Cluster bob = Cluster.joinAwait(alice.address());
bob.listen().subscribe(msg -> {
System.out.println("Bob received: " + msg.data());
bob.send(msg.sender(), Message.fromData("Greetings from Bob"));
});
// Join cluster node Carol to cluster with Alice and Bob
Cluster carol = Cluster.joinAwait(alice.address(), bob.address());
// Subscribe Carol to listen for incoming messages and print them to system out
carol.listen()
.map(msg -> "Carol received: " + msg.data())
.subscribe(System.out::println);
// Send from Carol greeting message to all other cluster members (which is Alice and Bob)
Message greetingMsg = Message.fromData("Greetings from Carol");
carol.otherMembers().forEach(member -> carol.send(member, greetingMsg));
// Avoid exit main thread immediately ]:->
Thread.sleep(1000);
}
}