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 consume(String, Function, Consumer, Executor) methods:

 service.consume("test", String::new, message -> {
   System.out.println("Received message " + message);
 }, executor);

 
  • Method Details

    • 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 or not (UDP)
    • 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 or not (UDP)
    • 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 or not (UDP)
    • 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.

      The returned future may be completed exceptionally with any exceptions listed by MessagingService.sendAndReceive(Address, String, byte[], boolean, Duration, Executor), as well as:

      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
    • replyTo

      <M, R> void replyTo(String subject, Function<byte[],M> decoder, Function<M,CompletableFuture<R>> handler, Function<R,byte[]> encoder)
      Adds a new subscriber for the specified message subject, which must return a reply.
      Type Parameters:
      M - incoming message type
      R - reply message type
      Parameters:
      subject - message subject
      decoder - decoder for deserialize incoming message
      handler - handler function that processes the incoming message and produces a reply
      encoder - encoder for serializing reply
    • consume

      <M> void consume(String subject, Function<byte[],M> decoder, Consumer<M> handler, Executor executor)
      Adds a new subscriber for the specified message subject which does not return any reply.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to deserialize incoming message
      handler - handler for handling message
      executor - executor to run this handler on
    • consume

      <M> void consume(String subject, Function<byte[],M> decoder, BiConsumer<MemberId,M> handler, Executor executor)
      Adds a new subscriber for the specified message subject which does not return any reply. If the sender is not a known member, the handler is not called (but no error is returned to the sender).
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to deserialize incoming message
      handler - handler for handling message, receiving the sender's member ID and the decoded message
      executor - executor to run this handler on
    • replyTo

      <M, R> void replyTo(String subject, Function<byte[],M> decoder, BiFunction<MemberId,M,R> handler, Function<R,byte[]> encoder, Executor executor)
      Adds a new subscriber for the specified message subject which must return a reply. If the sender is not a known member, the handler is not called, and a MessagingException.NoSuchMemberException is returned to the sender.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to deserializing incoming message
      handler - handler for handling message, receiving the sender's member ID and the decoded message
      encoder - to serialize the outgoing reply
      executor - executor to run this handler on
    • replyToAsync

      <M, R> void replyToAsync(String subject, Function<byte[],M> decoder, Function<M,CompletableFuture<R>> handler, Function<R,byte[]> encoder, Executor executor)
      Adds a new subscriber for the specified message subject which must return a reply. If the sender is not a known member, the handler is not called, and a MessagingException.NoSuchMemberException is returned to the sender.
      Type Parameters:
      M - incoming message type
      Parameters:
      subject - message subject
      decoder - decoder to deserializing incoming message
      handler - handler receives the decoded message and returns a future which is completed with the reply (which will be encoded using the given encoder)
      encoder - to serialize the outgoing reply
      executor - executor to run this handler on
    • unsubscribe

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