![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Axon
文章平均质量分 76
勇赴
这个作者很懒,什么都没留下…
展开
-
Axon Framework架构概述
CQRS本身是一个非常简单的模式。它只规定了处理命令的应用程序的组件应该与处理查询 的组件分离。 虽然这种分离本身非常简单,但它与其他模式结合时提供了许多非常强大的功 能。Axon 提供的构建块更容易实现不同的模式与CQRS的结合。下图显示了一个示例,一个基于CQRS的事件驱动的架构图示。 左侧显示的是UI组件, 通过 两种方式与应用程序的其余部分进行交互:它向应用程序发送命令 (显翻译 2017-06-04 22:29:20 · 12597 阅读 · 8 评论 -
Axon Framework事件处理
saga中的事件处理非常接近一个普通的事件监听器。上述的对于方法和参数解析的规则在这里是有效的。不过,有一个主要区别。虽然存在事件监听器只有单个实例处理所有传入事件,但也存在一个saga有多个实例,每个实例都对不同的事件感兴趣。例如,关于Order的id为1的管理业务Saga对Order“2”的事件不感兴趣,反之亦然。翻译 2017-06-11 06:47:09 · 1167 阅读 · 0 评论 -
AxonFramework命令分发
使用显式的命令分发机制有许多优点。首先,有一个单独的对象,清楚地描述了客户端的意图。通过记录的命令,你可以存储意图和相关资料备查。命令处理也很容易将你的命令处理组件暴露给远程客户端,例如通过web服务。测试也变得更容易,只需定义起始情境(given),就可以定义测试脚本,通过列出一些事件和命令,命令去执行(when)并且预期结果(then)。翻译 2017-06-16 06:08:51 · 1435 阅读 · 0 评论 -
AxonFramework,分布式命令总线连接器
JGroupsConnector JGroupsConnector使用(正如它的名字已经说明)JGroups作为底层发现和调度机制。描述JGroups的特性有太多的参考指南,请参阅JGroups用户指南以了解更多的细节。因为JGroups既处理节点的发现又处理它们之间的通信,所以JGroupsConnector既充当CommandBusConnector也充当CommandRouter。翻译 2017-06-19 05:36:50 · 1372 阅读 · 0 评论 -
AxonFramework,事件发布和处理
由应用程序生成的事件需要被分发到更新查询数据库的组件,搜索引擎或其他需要它们的资源:事件处理程序(Event Handlers)。事件总线(Event Bus)的职责是分发事件消息到所有感兴趣的组件。接收端,事件处理器(Event Processors)负责处理这些事件,其中包括相应的事件处理程序(Event Handlers)的调用。翻译 2017-06-20 05:31:22 · 1693 阅读 · 0 评论 -
AxonFramework,事件向上转换(Event Upcasting)
由于软件应用程序的不断变化的性质,很可能事件定义也随着时间而变化。由于事件存储被认为是只读和只追加(没有修改和删除)的数据源,所以应用程序必须能够读取所有事件,而不管它们何时添加。这时upcasting 出现了。最初是面向对象编程的一个概念,“一个子类在需要的时候自动转换成超类”,upcasting 概念也可以应用于事件溯源。upcast一个事件意味着将它从原来的结构转换成新的结构。翻译 2017-06-24 05:39:27 · 694 阅读 · 0 评论 -
AxonFramework,快照(Snapshotting)
当聚合存活很长一段时间,它们的状态不断变化,它们会生成大量的事件。不得不加载所有这些事件去复原一个聚合的状态,可能会有很大的性能影响。快照事件是一个有着特殊用途的领域事件:它将任意数量的事件归纳为单个事件。通过定期创建和存储快照事件,事件存储不必返回长的事件列表。只返回最后一个快照事件和在快照之后发生的所有事件例如,库存物品往往会经常变化。每销售一件物品,事件就减少一件库存。翻译 2017-06-25 06:40:55 · 1175 阅读 · 0 评论 -
AxonFramework,SpringBoot自动配置
Axon支持的SpringBoot自动配置是迄今为止开始配置Axon基础设施组件最简单的选择。只需添加axon-spring-boot-starter依赖性,Axon会自动配置基础设施组件(命令总线,事件总线),以及运行和储存聚合和Saga所需的任何组件。根据在应用程序上下文中的其他组件,如果他们在应用程序上下文中不是已经明确定义,Axon将定义某些组件。这意味着只需要配置不同于默认值的组件。翻译 2017-06-26 05:56:40 · 2535 阅读 · 0 评论 -
SpringBoot安全
如果Spring Security在classpath中,那么web应用默认对所有的HTTP端点使用’basic’认证。为了给web应用添加方法级别(method-level)的安全性,你还可以添加@EnableGlobalMethodSecurity和你想要的设置,额外的信息可以在Spring Security Reference中找到。翻译 2017-07-05 05:11:57 · 1472 阅读 · 0 评论 -
AxonFramework,高级定制
参数解析器你可以配置额外的ParameterResolvers,通过扩展ParameterResolverFactory类和创建一个名为/META-INF/service/org.axonframework.common.annotation.ParameterResolverFactory的文件,包含实现类的完全限定名称。翻译 2017-06-27 05:26:31 · 1019 阅读 · 0 评论 -
AxonFramework测试
CQRS最大的好处之一,尤其是事件溯源就事件和命令而言,单纯地表达测试是可能的。这两个功能组件,事件和命令对领域专家或业务所有者都有明确的含义。这不仅意味着测试表达就事件和命令而言有明确的功能含义,这也意味着他们不依靠任何实现选择。本章描述的特性需要axon-test模块,可通过配置maven依赖(使用axon-test 和test本章中描述的固件可用于任何测试框架,如JUnit和TestNG。翻译 2017-06-14 05:33:28 · 774 阅读 · 0 评论 -
AxonFramework,测试带注解的Saga
与命令处理组件类似,saga有一个明确定义的接口:它们只对事件作出响应。另一方面,saga通常具有时间概念,并且可以作为事件处理过程的一部分与其他组件交互。Axon Framework的测试支持模块包含帮助你编写saga测试的固件。 每个测试固件包含三个阶段,类似于前面部分描述的命令处理组件固件。翻译 2017-06-15 05:21:15 · 1248 阅读 · 0 评论 -
AxonFramework,Saga的基础设施
事件需要被重定向到适当的saga实例。为此,一些基础设施类是必需的。最重要的组件是SagaManager和SagaRepository。Saga Manager与处理事件的任何组件一样,processing也是由事件处理器完成的。然而,因为saga不是单例实例处理事件,但是有独特的生命周期,它们需要管理。Axon通过AnnotatedSagaManager来支持生命周期管理,这是提供给一个事件Pro翻译 2017-06-13 06:06:33 · 1960 阅读 · 1 评论 -
Axon Framework在聚合中处理命令
建议在包含处理状态命令的聚合中直接定义命令处理器,因为命令处理器有可能需要该集合的状态来执行其任务。要在一个聚合上定义一个命令处理器,只需用@CommandHandler注解命令处理方法即可。带@CommandHandler注解方法的规则和其他处理方法都是一样的。然而,命令不仅通过他们的有效载荷(payload)进行路由。命令消息携带一个名字,该名称默认为命令对象的完全限定类名。AxonFramework翻译 2017-06-09 05:27:00 · 1637 阅读 · 0 评论 -
Axon Framework聚合事件溯源
除了存储一个聚合的当前状态,还可以根据过去发布的事件恢复一个聚合的状态。为此,所有状态的更改必须由一个事件来表示。主要部分,事件溯源聚合类似于“有规律”聚合:他们必须声明一个标识符并可以使用apply函数发布事件。然而,事件溯源聚合中状态的变化(也就字段的任何变化)必须在@EventSourcingHandler注解的方法中被排他地执行。这包括设置聚合标识符。注意,聚合标识必须被设置在聚合发布的第一翻译 2017-06-08 06:22:13 · 2162 阅读 · 0 评论 -
Axon Framework消息、命令和事件
Axon 消息、命令和事件的概念翻译 2017-06-05 15:02:41 · 1938 阅读 · 0 评论 -
AxonFramework命令总线
命令总线是将命令分发给各自的命令Handler的机制。每个命令总是被精确发送到一个命令Handler。如果没有可用的命令Handler为已分发的命令,将会抛出NoHandlerForCommandException异常。对同一命令类型订阅多个命令Handler将导致订阅互相取代。在这种情况下,最后一个订阅获胜。翻译 2017-06-17 06:02:20 · 1340 阅读 · 0 评论 -
AxonFramework命令拦截器
使用命令总线的优点之一,是能够基于所有传入的命令采取相应的行动。例子是,不论哪种命令类型,你都希望去做日志记录或身份验证。这是使用拦截器来完成的。有不同类型的拦截器:Dispatch拦截器和Handler拦截器。前者在命令被分发到命令处理程序之前被调用。在那时,它甚至不能确定该命令有任何处理器的存在。后者在命令处理程序被调用之前调用。翻译 2017-06-18 06:19:37 · 864 阅读 · 0 评论 -
Axon Framework配置
获得一个默认的配置是非常容易的: Configuration config = DefaultConfigurer.defaultConfiguration().buildConfiguration();这个配置为分发消息提供了在线程上处理消息、分发它们的实现。显然,这种配置不会很有用。你必须将你的命令模型对象和事件处理器注册到该配置中。为此,通过.defaultConfiguration()方法翻译 2017-06-07 05:32:03 · 996 阅读 · 0 评论 -
Axon Framework简介
Axon是一个轻量级框架,能够帮助开发者通过在架构层面构建可扩展和可伸缩的应用。(注:以DDD面向领域驱动设计为基础的CQRS框架)Axon Framework翻译 2017-06-04 05:59:13 · 2802 阅读 · 0 评论 -
Axon Framework命令模型
在一个基于CQRS的应用程序中,领域模型(由Eric Evans和Martin Fowler定义)可以是一个非常强大的机制,来驾驭在验证和执行状态的变化时所涉及的复杂性,虽然典型的领域模型提供了大量的构建块,但当在CQRS中应用命令处理时有一个构件起着主导性的作用:聚合。应用程序中的一个状态的改变,始于一个命令。命令不但是表达意图(描述你想要做什么)的组合,而且是基于这一意图采取行动所需的信息。命令翻译 2017-06-07 05:33:47 · 1172 阅读 · 0 评论 -
AxonFramework,分发事件
在某些情况下,有必要发布事件到外部系统,比如消息broker。Spring AMQPAxon提供了开箱即用的支持从一个AMQP message broker中转递事件和传递事件到broker中,比如Rabbit MQ。将事件转发到AMQP EchangeSpringAMQPPublisher将事件转发给一个AMQP Exchange。翻译 2017-06-21 06:08:29 · 1368 阅读 · 1 评论 -
Axon Framework管理复杂的业务事务
并不是每个命令都能够在一个ACID事务中完全执行。现金转账事务是一个很常见频繁出现的例子,用来作为论据。通常认为,把钱从一个账户转移到另一个账户,绝对需要原子性和一致性。其实并非如此,相反,这是完全不可能的。如果钱从A银行的帐户转移到B银行的帐户怎么办?A银行要获得B银行数据库的锁吗?如果转账正在进行的时候,A银行已经扣除了金额,但B银行并没收到它,这不是很奇怪吗?事翻译 2017-06-10 07:08:36 · 1278 阅读 · 0 评论 -
AxonFramework,存储库
存储库是提供对聚合访问的机制。存储库充当了用于保存数据的实际存储机制的网关。在CQRS中,存储库只需要能够根据他们的惟一标识符找到聚合。任何其他类型的查询,应该在查询数据库中执行。在Axon Framework中,所有存储库必须实现Repository接口。这个接口规定了三种方法:load(identifier, version), load(identifier)和newInstance翻译 2017-06-22 06:32:36 · 1044 阅读 · 0 评论 -
Axon Framework工作单元,The Unit of Work
工作单元The Unit Of Work翻译 2017-06-06 06:02:00 · 1536 阅读 · 0 评论 -
AxonFramework,EventStore实现
事件溯源存储库需要一个事件存储(event store)从聚合中存储和加载事件。事件存储提供了一个事件总线的功能,增加了持久化已发布的事件,并能够基于聚合标识符检索事件。Axon提供了一个开箱即用的事件存储,EmbeddedEventStore。它委托事件实际的存储和检索到EventStorageEngine。翻译 2017-06-23 06:31:34 · 4281 阅读 · 0 评论 -
Axon Framework跟踪最后期限
当有事发生时,很容易使一个saga采取行动。毕竟,有一个事件要通知saga。但是如果你想让你的saga,在什么事情都没发生的情况下做些什么呢?这就是最后期限。在发票中,通常是几周,而信用卡支付的确认可能在几秒钟内。在Axon中,你可以使用一个EventScheduler计划发布一个事件。在发票的例子中,你希望发票在30内付清。翻译 2017-06-12 05:44:03 · 725 阅读 · 0 评论 -
AxonFramework,事件序列化器调优
XStream序列化器XStream是完全可配置和可扩展的。如果你只使用一个无格式XStreamSerializer,有一些速效方案随时取用。XStream允许你为包名称和事件类名称配置别名。别名通常更短(特别是如果你有长包名),使事件的序列化形式更小。由于我们讨论的是XML,所以每个字符从XML中移除是两次(一个开始标记,一个结束标记)。翻译 2017-06-28 15:12:01 · 587 阅读 · 0 评论