[异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?

举个例子1: 钱有100,两口子之前有约定要剩下90, 老公看到有100,花10元,花完以后因为事件异步,数据不一致,此时老婆刷新页面也看到100,再花10元.那最终是80元. 不符合用户的预期. 这个问题如何解决?

http://www.jdon.com/46473#23145064

异步需要一个异步回调.(或者实现一个通知接口. 不如回调实现来的漂亮.) 异步需要事件 异步需要重试机制

昨天咨询了下我们的高T.

他认为是这样实现的: 这个场景在国外银行很常见,国外有夫妻卡.

先说说不用异步事件框架实现是如何保持一致性的.

丈夫显示100元, 进行消费,向后端 传递聚合跟的objectVersion 1, 正常扣钱10. 传递聚合跟的objectVersion值+1变为2.

妻子由于也是显示100元,进行消费,所以递聚合跟的objectVersion也是1, 在你的调用方法前会做业务校验,由于版本号objectVersion不匹配,妻子会得到错误.页面重新刷新,显示90元. 妻子就不会继续消费了.

再说说异步事件架构下:

丈夫显示100元,进行消费,. 变成事件1存储. 正常返回给前端.但不是真的出钱. 而是告知用户"后台正在处理,请稍等".

妻子由于也是显示100元,进行消费,同样变成事件2存储.正常返回给前端.同样不出钱,告知用户"后台正在处理,请稍等".

这时候后台队列里有两个事务产生的事件. 顺序看上面两个事务commit的次序. 加时丈夫事件1先被执行. 检查聚合跟的objectVersion,成功.通过一个新接口告知给前端钱已扣除.妻子的事件2后执行,检查聚合跟的objectVersion,失败.通过一个新接口告知给前端钱无法扣除,无法消费.

同步架构采用异步架构,整个业务流程都变了. 需要新增加一个接口.还有就是.异步事件执行可能因为网络等原因产生偶然Exception.需要有重试的机制.

   总结: 同步流程采用异步后. 对于开发者和产品经理来说都更复杂了.

对于开发者来说: 需要1.保存事件 2. 重试机制 3. 新增加一个接口(即异步框架里的回调接口)  4.告知产品经理流程已变成异步化

对产品经理来说: 需要把原来的一个同步流程思考为多个流程.

      那么到底是谁影响谁呢?

开发和产品经理是互相决定的. 一方面当产品经理处于用户体验的角度,可能会主动把一个同步流程,拆成多个异步流程.增加步骤和接口. 这时候开发者坑并不愿意,因为增加了工作量. 另一方面开发者处于性能,并发量的考虑,可能会把PM思考的一个同步调用改成异步. 这时候产品经理需要知道要有新的页面提醒用户"后台处理中", 流程已变.

CQRS 架构中 多个事务生成的领域event 谁先执行谁后执行?

两个实体Teacher ,Student

事务1 产生事件, TeacherEvent1,StudentEvent1,事务2 产生事件 TeacherEvent2, StudentEvent2.

如何记录这些事件,是否需要 把N个领域事件和事务Id绑定,以便之后按事务顺序执行这些事件.确保整体事件的成功或者失败时,整体事件事务回滚.确保数据的正确性?

[异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?

时间: 2024-10-25 17:08:56

[异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?的相关文章

node js 异步执行流程控制模块Async介绍

1.Async介绍 sync是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等. 项目地址:https://github.com/caolan/async 2. Async安装 npm install async 3.

流程设计--页面介绍

上图为流程设计器的主界面,左边栏目为树形结构,提供两种树形,一个为流程定义的分类的树形,另外一个为根据模块菜单的树形. [功能描述] 1.新增:新增功能主要处理定义的工作流程的建立. 2.删除:删除定义的工作流,注意,删除只能删除处于设计状态的工作流,处于发布和停用状态的工作流是不允许删除的. 3.修改:处于设计状态下的工作流是可以继续修改的. 4.复制:提供流程模版的拷贝功能,生成新的工作流程.再继续修改. 5.分组:将设计的工作流程归分到所属的分类目录中去,便于查找和分类. 6.导出:提供工

Javascript异步编程之三Promise: 像堆积木一样组织你的异步流程

这篇有点长,不过干货挺多,既分析promise的原理,也包含一些最佳实践,亮点在最后:) 还记得上一节讲回调函数的时候,第一件事就提到了异步函数不能用return返回值,其原因就是在return语句执行的时候异步代码还没有执行完毕,所以return的值不是期望的运算结果. Promise却恰恰要回过头来重新利用这个return语句,只不过不是返回最终运算值,而是返回一个对象,promise对象,用它来帮你进行异步流程管理. 先举个例子帮助理解.Promise对象可以想象成是工厂生产线上的一个工人

网络数据的下载(NSUrlconnection异步下载和NSstring同步下载)和UI界面数据的刷新(都是抛弃第三方库的一些本质)

<1>NSString同步下载        //字符串的类方法,会根据url向服务器发起同步的数据请求,并将请求结果作为返回值    //同步请求数据,会对程序的UI主线程造成阻塞,用户体验极差 NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:kUrl] encoding:NSUTF8StringEncoding error:nil];    //json格式的数据 进行json解析 数据最外层是

流程设计--引擎理念

工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等核心解决方案.工作流引擎是为工作流实例提供执行环境,它是工作流管理系统的核心服务,因此,工作流引擎设计的好坏直接关系到工作流的执行效率与可扩展性. 工作流引擎是工作流管理系统中为过程实例和活动实例提供运行环境的服务软件,是整个工作流管理系统的核心,工作流引擎的主要功能有: (1).解释流程定义 (2).创建流程实例(人工创建.自动创建:自动创建又包括自动定时

流程设计-流程模式

工作流基本包含如下多种模式用于工作流过程建模和分析: (1).基本模式 5种 ● 顺序模式---- 按照顺序执行各项活动 ● 并行分支模式----同时运行两个活动 ● 同步模式----同步两个并行的执行线程 ● 单选模式----从多条路径中选择一个执行 ● 简单合并模式----合并两个二选一路径 (2).高级分支与同步模式 5种 ● 多选模式----从多条执行路径中选出几条 ● 同步合并模式----合并多条路径,如果有多条路径被选择,则进行同步:如果只有一条路径被选择,则进行简单合并 ● 多合并

详解mysql复制机制--异步复制,半同步复制和并行复制

详解MySQL复制机制--异步复制,半同步复制和并行复制 **# 异步复制 异步复制是MySQL自带的最原始的复制方式,主库和备库成功建立复制关系后,在备库上会有一个IO线程去主库拉取binlog,并将binlogx到本地,就是下图中Relaylog,然后备库会开启另外一个SQL线程取回放Relay log,通过这种方式达到Master-Slave数据同步的目的. 通常情况下,slave是只读的,可以承担一部分读流量,而且可以根据实际需要,添加一个或者多个slave,这样在一定程度上可以缓解主库

Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?

前言 在很多互联网应用系统中,请求处理异步化是提升系统性能一种常用的手段,而基于消息系统的异步处理由于具备高可靠性.高吞吐量的特点,因而在并发请求量比较高的互联网系统中被广泛应用.与此同时,这种方案也带来了调用链路处理上的问题,因为大部分应用请求都会要求同步响应实时处理结果,而由于请求的处理过程已经通过消息异步解耦,所以整个调用链路就变成了异步链路,此时请求链路的发起者如何同步拿到响应结果,就需要进行额外的系统设计考虑. 为了更清晰地理解这个问题,小码哥以最近正在做的共享单车的IOT系统为例,给

流程设计(抽象节点法)

如何设计一个配置灵活的流程? 要做到以下几点 1.节点状态.节点按钮可以动态的配置,不会影响流程的运行,可以在现有的流程中更改流程的走向 2.节点可以对应多个按钮,即流程进入某一节点的时候可以显示多个按钮 FlowNode 流程节点状态,流程节点状态用于表达流程的状态 那么NodeState和ButtonState分别代表什么意思呢? 为什么需要两种状态?举个简单的例子,以一个外卖员接单为例,当外卖员接单后,可能会有两个按钮供他选择,受理订单和拒绝受理(假如超出了他的配送范围),假如受理订单,我