org.axonframework.commandhandling.distributed
Class DistributedCommandBus

java.lang.Object
  extended by org.axonframework.commandhandling.distributed.DistributedCommandBus
All Implemented Interfaces:
CommandBus

public class DistributedCommandBus
extends Object
implements CommandBus

Implementation of a CommandBus that is aware of multiple instances of a CommandBus working together to spread load. Each "physical" CommandBus instance is considered a "segment" of a conceptual distributed CommandBus.

The DistributedCommandBus relies on a CommandBusConnector to dispatch commands and replies to different segments of the CommandBus. Depending on the implementation used, each segment may run in a different JVM.

Since:
2.0
Author:
Allard Buijze

Constructor Summary
DistributedCommandBus(CommandBusConnector connector)
          Initializes the command bus with the given connector and an AnnotationRoutingStrategy.
DistributedCommandBus(CommandBusConnector connector, RoutingStrategy routingStrategy)
          Initializes the command bus with the given connector and routingStrategy.
 
Method Summary
 void dispatch(CommandMessage<?> command)
          Dispatch the given command to the CommandHandler subscribed to that type of command.
<R> void
dispatch(CommandMessage<?> command, CommandCallback<R> callback)
          Dispatch the given command to the CommandHandler subscribed to that type of command.
 void setCommandDispatchInterceptors(Collection<CommandDispatchInterceptor> newDispatchInterceptors)
          Sets the interceptors that intercept commands just prior to dispatching them.
<C> void
subscribe(String commandName, CommandHandler<? super C> handler)
          Subscribe the given handler to commands of type commandType.
<C> boolean
unsubscribe(String commandName, CommandHandler<? super C> handler)
          Unsubscribe the given handler to commands of type commandType.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DistributedCommandBus

public DistributedCommandBus(CommandBusConnector connector)
Initializes the command bus with the given connector and an AnnotationRoutingStrategy.

Parameters:
connector - the connector that connects the different command bus segments

DistributedCommandBus

public DistributedCommandBus(CommandBusConnector connector,
                             RoutingStrategy routingStrategy)
Initializes the command bus with the given connector and routingStrategy. The routingStrategy is used to calculate a routing key for each dispatched command. For a given configuration of segments, commands resulting in the same routing key are routed to the same segment.

Parameters:
connector - the connector that connects the different command bus segments
routingStrategy - the RoutingStrategy to define routing keys for each command
Method Detail

dispatch

public void dispatch(CommandMessage<?> command)
Dispatch the given command to the CommandHandler subscribed to that type of command. No feedback is given about the status of the dispatching process. Implementations may return immediately after asserting a valid handler is registered for the given command.

Specified by:
dispatch in interface CommandBus
Parameters:
command - The Command to dispatch
Throws:
CommandDispatchException - when an error occurs while dispatching the command to a segment
See Also:
GenericCommandMessage.asCommandMessage(Object)

dispatch

public <R> void dispatch(CommandMessage<?> command,
                         CommandCallback<R> callback)
Dispatch the given command to the CommandHandler subscribed to that type of command. When the command is processed, on of the callback methods is called, depending on the result of the processing.

When the method returns, the only guarantee provided by the CommandBus implementation, is that the command has been successfully received. Implementations are highly recommended to perform basic validation of the command before returning from this method call.

Implementations must start a UnitOfWork when before dispatching the command, and either commit or rollback after a successful or failed execution, respectively.

Specified by:
dispatch in interface CommandBus
Type Parameters:
R - The type of the expected result
Parameters:
command - The Command to dispatch
callback - The callback to invoke when command processing is complete
Throws:
CommandDispatchException - when an error occurs while dispatching the command to a segment
See Also:
GenericCommandMessage.asCommandMessage(Object)

subscribe

public <C> void subscribe(String commandName,
                          CommandHandler<? super C> handler)
Subscribe the given handler to commands of type commandType.

If a subscription already exists for the given type, the behavior is undefined. Implementations may throw an Exception to refuse duplicate subscription or alternatively decide whether the existing or new handler gets the subscription.

In the DistributedCommandBus, the handler is subscribed to the local segment only.

Specified by:
subscribe in interface CommandBus
Type Parameters:
C - The Type of command
Parameters:
commandName - The name of the command to subscribe the handler to
handler - The handler instance that handles the given type of command

unsubscribe

public <C> boolean unsubscribe(String commandName,
                               CommandHandler<? super C> handler)
Unsubscribe the given handler to commands of type commandType. If the handler is not currently assigned to that type of command, no action is taken.

In the DistributedCommandBus, the handler is unsubscribed from the local segment only.

Specified by:
unsubscribe in interface CommandBus
Type Parameters:
C - The Type of command
Parameters:
commandName - The name of the command the handler is subscribed to
handler - The handler instance to unsubscribe from the CommandBus
Returns:
true of this handler is successfully unsubscribed, false of the given handler was not the current handler for given commandType.

setCommandDispatchInterceptors

public void setCommandDispatchInterceptors(Collection<CommandDispatchInterceptor> newDispatchInterceptors)
Sets the interceptors that intercept commands just prior to dispatching them.

This operation is only guaranteed to be thread safe if no commands are dispatched during the invocation of this method. Doing so may result in commands not being intercepted at all while replacing the interceptors. Once this operation returns, all commands are guaranteed to be processed by the given interceptors.

Parameters:
newDispatchInterceptors - The interceptors to intercepts commands with


Copyright © 2010-2016. All Rights Reserved.