Axon在业务逻辑和基础架构配置方面保持严格的分离。为了做到这一点,Axon将提供一些构建模块来处理基础设施问题,例如消息处理器周围的事务管理。消息的实际payload和handler的内容(尽可能的)都是在Axon-independent Java类中实现的。
为了使这些基础架构组件的配置更容易,并定义与每个功能组件的关系,Axon提供了一个配置API。
Setting up a configuration
获取默认配置非常简单:
Configuration config = DefaultConfigurer.defaultConfiguration()
.buildConfiguration();
这个配置通过在线程上的处理消息为分发消息提供了构建块。
显然,这种配置不会很有用。你必须将你的命令模型(Command Model)对象和事件处理器(Event Handlers)注册到该配置中。
为此,请使用.defaultConfiguration()方法来返回Configurer(配置)实例。
Configurer configurer = DefaultConfigurer.defaultConfiguration();
配置器提供了许多方法供您注册这些组件。如何配置这些内容将在每个组件的各个章节中详细介绍。
组件注册的一般形式如下:
Configurer configurer = DefaultConfigurer.defaultConfiguration();
configurer.registerCommandHandler(c -> doCreateComponent());
请注意registerCommandBus调用的是lambda表达式。此表达式的c参数是描述完整配置的配置对象。如果您的组件需要其他组件才能正常运行,则可以使用此配置来获取它们。
例如,当我们注册一个Command Handler时须要添加一个依赖的序列化组件:
configurer.registerCommandHandler(c -> new MyCommandHandler(c.serializer());
并不是所有的组件都有其明确的访问方法。要从配置中获取组件,请使用:
configurer.registerCommandHandler(c -> new MyCommandHandler(c.getComponent(MyOtherComponent.class));
该组件必须使用configurer.registerComponent(componentType,builderFunction)方法向Configurer注册。构造函数将接收Configuration对象作为输入参数。
使用Spring来配置
如果你使用Spring,你不须要显示的使用Configurer。相反,你只须简单地将@EnableAxon放在Spring 一个带有@Configuration的类上。
Axon将使用Spring应用程序上下文来定位构建块的特定实现,并为那些不存在的提供默认值。因此,取代在配置中注册构件,你只需要在Spring应用程序上下文中让@Bean可用即可。