所以我的问题是,这样的错误是否应该以一种帐目分类帐的方式来“解决”,即通过发送一个新的“反转”命令,然后以这样一种方式传播到预测,使失败的事件现在得到解决?
例如,假设我们有一个更新客户信用的命令。发布事件,一个投影更新其“总信用”统计信息,另一个投影将更新发布到某个用于UI的websocket,最后,另一个投影维护信用状态--最后一个处理程序失败。我们是否应该发送一个命令来回滚业务事务,并再次扣除信用,再次更新websocket等?在轴突的情况下,是否有某种方法将其捕获为事务?
我要声明的是,决定是否采取一个操作,从而处理一个命令是正确的,应该始终取决于命令模型/聚合。聚合处于处理操作的不正确状态通常会导致“业务异常/错误”。
但是,如果您要在事件处理失败时做出决定,则需要在事件处理服务中添加一些决策制定逻辑,而在大多数情况下,它可能并不关心这些逻辑。如果这样的事件处理服务更新了视图/查询模型,但未能这样做,我认为这不是向聚合发布“补偿命令”以“回滚/撤消事件”的有效理由。
在您的示例中,您有一个“信用状态维护者”,我猜它会更新查询模型。因此,我认为处理异常的问题在于服务本身,而不是通过执行补偿操作。
我想使用事件源和CQRS,所以我需要预测(我希望我使用的是正确的术语)来更新我的查询数据库。如何处理数据库错误? 例如,我的一个查询缓存数据库不可用,但我已经更新了其他数据库。因此,当snyc回到业务中时,不可用的数据库将不会与其他数据库一起在snyc中。它如何知道它必须运行例如事件存储中的最后10个域事件?我想我必须存储有关数据库当前状态的信息,但是如果数据库状态存储失败怎么办?有什么想法,最佳
所以我将通过使用一个例子来解释这个问题,因为它使一切更加具体,希望能减少歧义。 架构非常简单 1微服务 每个微服务都将使用CQRS/ES设计模式,这意味着 每个微服务都有自己的Aggregate映射现实世界问题的域 聚合的状态将从事件存储重建 每个事件都将表示聚合中的状态更改,并将通过消息代理传输到对更改感兴趣的任何服务 每个微服务都将在其自己的域内进行事务处理 每个微服务最终都会与其他域保持一致
D3默认包括了一些常见投影,如下所示。众多的(不太常用的)投影在扩展地理投影插件和多面体投影插件中是可用的。 由D3提供的大多数投影都是通过d3.geo.projection来创建并配置的,你可以旋转这个地球,缩放或转换画布等。除非你正在执行一个新的原始投影,否则你可能不会用D3.geo.projection来构造,但是你有可能使用这个配置方法。 d3.geo.projection(raw) 从指
本文向大家介绍OpenGL ES正交投影实现方法(三),包括了OpenGL ES正交投影实现方法(三)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenGL ES正交投影展示的具体代码,供大家参考,具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的,也没有出现什么问题,接下来不妨忘记前面绘制六边形的代码,让我们按照自己的理解来绘制一个简单的正方形。 按照我的理
本文向大家介绍OpenGL ES透视投影实现方法(四),包括了OpenGL ES透视投影实现方法(四)的使用技巧和注意事项,需要的朋友参考一下 在之前的学习中,我们知道了一个顶点要想显示到屏幕上,它的x、y、z分量都要在[-1,1]之间,我们回顾一下渲染管线的图元装配阶段,它实际上做了以下几件事:剪裁坐标、透视分割、视口变换。图元装配的输入是顶点着色器的输出,抓哟是物体坐标gl_Position,
我可以使用两种不同的方法: 使用Axon:分级聚合负责处理CreateRatingCommand并发送RatingCreateDevent。发送该事件将使用要存储在事件存储区中的评等。其他事件处理程序可以在连接到Axon服务器实例并对分级执行任何需要的操作时重放事件流。在本例中,事件处理程序将用作流处理器。 使用Kafka:KafkaProducer将用于在Kafka主题中存储分级POJO(经过正