Interface ClusterCommunicationService

All Known Subinterfaces:
ManagedClusterCommunicationService
All Known Implementing Classes:
DefaultClusterCommunicationService

public interface ClusterCommunicationService
High-level MemberId based intra-cluster messaging service.

The cluster communication service is used for high-level communication between cluster members. Messages are sent and received based on arbitrary String message subjects. Direct messages are sent using the MemberId to which to send the message. This API supports several types of messaging:

To register to listen for messages, use one of the subscribe(String, Consumer, Executor) methods:

 atomix.getCommunicationService().subscribe("test", message -> {
   System.out.println("Received message");
 }, executor);

 
  • Method Details

    • broadcast

      default <M> void broadcast(String subject, M message)
      Broadcasts a message to all members.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
    • broadcast

      default <M> void broadcast(String subject, M message, boolean reliable)
      Broadcasts a message to all members.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      reliable - whether to perform a reliable (TCP) unicast
    • broadcast

      default <M> void broadcast(String subject, M message, Function<M,byte[]> encoder)
      Broadcasts a message to all members.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      encoder - function for encoding message to byte[]
    • broadcast

      <M> void broadcast(String subject, M message, Function<M,byte[]> encoder, boolean reliable)
      Broadcasts a message to all members.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      encoder - function for encoding message to byte[]
      reliable - whether to perform a reliable (TCP) unicast
    • multicast

      default <M> void multicast(String subject, M message, Set<MemberId> memberIds)
      Multicasts a message to a set of members over TCP.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      memberIds - recipient node identifiers
    • multicast

      <M> void multicast(String subject, M message, Function<M,byte[]> encoder, Set<MemberId> memberIds, boolean reliable)
      Multicasts a message to a set of members.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      encoder - function for encoding message to byte[]
      memberIds - recipient node identifiers
      reliable - whether to perform a reliable (TCP) unicast
    • unicast

      default <M> void unicast(String subject, M message, MemberId memberId)
      Sends a message to a member over TCP.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      memberId - recipient node identifier
    • unicast

      <M> void unicast(String subject, M message, Function<M,byte[]> encoder, MemberId memberId, boolean reliable)
      Sends a message to a member.
      Type Parameters:
      M - message type
      Parameters:
      subject - message subject
      message - message to send
      encoder - function for encoding message to byte[]
      memberId - recipient node identifier
      reliable - whether to perform a reliable (TCP) unicast
    • send

      default <M, R> CompletableFuture<R> send(String subject, M message, MemberId toMemberId, Duration timeout)
      Sends a message and expects a reply.
      Type Parameters:
      M - request type
      R - reply type
      Parameters:
      subject - message subject
      message - message to send
      toMemberId - recipient node identifier
      timeout - response timeout
      Returns:
      reply future
    • send

      <M, R> CompletableFuture<R> send(String subject, M message, Function<M,byte[]> encoder, Function<byte[],R> decoder, MemberId toMemberId, Duration timeout)
      Sends a message and expects a reply.
      Type Parameters:
      M - request type
      R - reply type
      Parameters:
      subject - message subject
      message - message to send
      encoder - function for encoding request to byte[]
      decoder - function for decoding response from byte[]
      toMemberId - recipient node identifier
      timeout - response timeout
      Returns:
      reply future
    • subscribe

      default <M, R> CompletableFuture<Void> subscribe(String subject, Function<M,R> handler, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      R - reply message type
      Parameters:
      subject - message subject
      handler - handler function that processes the incoming message and produces a reply
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      <M, R> CompletableFuture<Void> subscribe(String subject, Function<byte[],M> decoder, Function<M,R> handler, Function<R,byte[]> encoder, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      R - reply message type
      Parameters:
      subject - message subject
      decoder - decoder for resurrecting incoming message
      handler - handler function that processes the incoming message and produces a reply
      encoder - encoder for serializing reply
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      default <M, R> CompletableFuture<Void> subscribe(String subject, Function<M,CompletableFuture<R>> handler)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      R - reply message type
      Parameters:
      subject - message subject
      handler - handler function that processes the incoming message and produces a reply
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      <M, R> CompletableFuture<Void> subscribe(String subject, Function<byte[],M> decoder, Function<M,CompletableFuture<R>> handler, Function<R,byte[]> encoder)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      R - reply message type
      Parameters:
      subject - message subject
      decoder - decoder for resurrecting incoming message
      handler - handler function that processes the incoming message and produces a reply
      encoder - encoder for serializing reply
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      default <M> CompletableFuture<Void> subscribe(String subject, Consumer<M> handler, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      handler - handler for handling message
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      default <M> CompletableFuture<Void> subscribe(String subject, BiConsumer<MemberId,M> handler, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      handler - handler for handling message
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      <M> CompletableFuture<Void> subscribe(String subject, Function<byte[],M> decoder, Consumer<M> handler, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to resurrecting incoming message
      handler - handler for handling message
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • subscribe

      <M> CompletableFuture<Void> subscribe(String subject, Function<byte[],M> decoder, BiConsumer<MemberId,M> handler, Executor executor)
      Adds a new subscriber for the specified message subject.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to resurrecting incoming message
      handler - handler for handling message
      executor - executor to run this handler on
      Returns:
      future to be completed once the subscription has been propagated
    • unsubscribe

      void unsubscribe(String subject)
      Removes a subscriber for the specified message subject.
      Parameters:
      subject - message subject