Interface CommandBusConnector

All Superinterfaces:
MessageHandlerInterceptorSupport<CommandMessage<?>>

public interface CommandBusConnector extends MessageHandlerInterceptorSupport<CommandMessage<?>>
Interface describing the component that remotely connects multiple CommandBus instances.
Since:
2.0
Author:
Allard Buijze
  • Method Details

    • send

      <C> void send(@Nonnull Member destination, @Nonnull CommandMessage<? extends C> command) throws Exception
      Sends the given command to the node assigned to handle messages with the given routingKey. The sender does not expect a reply.

      If this method throws an exception, the sender is guaranteed that the destination of the command did not receive it. If the method returns normally, the actual implementation of the connector defines the delivery guarantees.

      Connectors route the commands based on the given routingKey. Using the same routingKey will result in the command being sent to the same member. Each message must be sent to exactly one member.

      Parameters:
      destination - The member of the network to send the message to
      command - The command to send to the (remote) member
      Throws:
      Exception - when an error occurs before or during the sending of the message
    • send

      <C, R> void send(@Nonnull Member destination, @Nonnull CommandMessage<C> command, @Nonnull CommandCallback<? super C,R> callback) throws Exception
      Sends the given command to the node assigned to handle messages with the given routingKey. The sender expect a reply, and will be notified of the result in the given callback.

      If this method throws an exception, the sender is guaranteed that the destination of the command did not receive it. If the method returns normally, the actual implementation of the connector defines the delivery guarantees. Implementations should always invoke the callback with an outcome.

      If a member's connection was lost, and the result of the command is unclear, the CommandCallback.onResult(CommandMessage, CommandResultMessage)} method is invoked with a RemoteHandlingException describing the failed connection. A client may choose to resend a command.

      Connectors route the commands based on the given routingKey. Using the same routingKey will result in the command being sent to the same member.

      Type Parameters:
      C - The type of object expected as command
      R - The type of object expected as result of the command
      Parameters:
      destination - The member of the network to send the message to
      command - The command to send to the (remote) member
      callback - The callback
      Throws:
      Exception - when an error occurs before or during the sending of the message
    • subscribe

      Registration subscribe(@Nonnull String commandName, @Nonnull MessageHandler<? super CommandMessage<?>> handler)
      Subscribes a command message handler for commands with given commandName.
      Parameters:
      commandName - the command name. Usually this equals the fully qualified class name of the command.
      handler - the handler to subscribe
      Returns:
      a handle that can be used to end the subscription
    • localSegment

      default Optional<CommandBus> localSegment()
      Return an Optional containing the CommandBus which is used by this CommandBusConnector to dispatch local and incoming CommandMessages on. It is highly recommended to implement this method to ensure an actual CommandBus is provided instead of a default Optional.empty().
      Returns:
      an Optional containing the CommandBus which is used by this CommandBusConnector to dispatch local and incoming CommandMessages on
    • initiateShutdown

      default CompletableFuture<Void> initiateShutdown()
      Initiate the shutdown of a CommandBusConnector. CommandMessages should no longer be dispatched after this method has been invoked.
      Returns:
      a CompletableFuture indicating when all previously sent commands are completed