Command Bus
Axon 中 CommandBus 的实现类和继承结构:
CommandBus
CommandBus 的接口定义:
package org.axonframework.commandhandling;
public interface CommandBus {
// 将指定命令分派到订阅到这个命令类型的 command handler
default <C> void dispatch(CommandMessage<C> command) {
// 默认实现,CommandCallback 设置为LoggingCallback,仅仅打印日志
dispatch(command, LoggingCallback.INSTANCE);
}
// 将指定命令分派到订阅到这个命令类型的 command handler。
// 当方法返回时,CommandBus 实现唯一能提供的保证,是命令已经被成功接收。
// 强烈建议实现在这个调用返回前执行基本的命令验证。
//
// 在开始分配命令前,实现必须启动一个 UnitOfWork ,然后要不提交要不回滚,对应于执行成功或者失败。
<C, R> void dispatch(CommandMessage<C> command, CommandCallback<? super C, R> callback);
// 将给定 handler 订阅到命令类型。
// 如果给定类型已经存在订阅,则行为未定义。实现可能抛出一个异常来拒绝重复订阅,或者决定是已存还是新的handler获得订阅。
Registration subscribe(String commandName, MessageHandler<? super CommandMessage<?>> handler);
}
RecordingCommandBus
不在订阅或者分配命令时执行任何操作,只是记录他们。
这个实现不是mock的替代品,而是在很多简单场景下有用。
TBD: 看看到底可以怎么用
SimpleCommandBus
CommandBus 的实现,分配命令给订阅到特定命令类型的handler。可以配置拦截器来添加对命令的处理,而不管他们的类型,例如日志,安全(认证),sla监控,等等。
这个类可以被监控,如 StatisticsProvider 接口的实现所示。
TBD: 监控?
AsynchronousCommandBus
SimpleCommandBus的特殊版本,异步处理命令。默认使用Cached Thread Pool,也可以传入指定的 Executor。
DisruptorCommandBus
性能非常高的异步 CommandBus 实现。
TBD: 需要详细研究
DistributedCommandBus
CommandBus 实现,由多个 CommandBus 的实例组成,一起工作来