[异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?
来源:互联网 发布:音乐动画相册制作软件 编辑:程序博客网 时间:2024/06/06 18:29
举个例子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绑定,以便之后按事务顺序执行这些事件.确保整体事件的成功或者失败时,整体事件事务回滚.确保数据的正确性?
1 0
- [异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?
- 处理异步提交的时候返回结果
- C语言中函数如何返回处理后的结果?
- ajax异步如何返回responseText
- Ajax异步同步问题,Ajax如何获取返回值
- 异步调用接口返回大量数据,如何处理才能使页面渲染时不卡?
- 异步调用同步返回
- java 如何运行多个任务并处理返回第一个结果
- Ajax发送同步请求给Spring,通过controller处理完成后如何返回响应
- 利用countDownLatch将异步多线程结果同步返回
- Python提交表单并处理返回结果
- .net 异步调用webservice 并取得Webservice返回结果
- 二把刀:异步调用web service并返回结果
- Node.js+Wilddog 中复杂嵌套数据查询的异步处理同步返回数据问题
- 解决jQuery循环调用ajax,异步返回结果混乱
- Activity处理返回结果
- ajax 返回数据,alert后显示object类型,如何处理
- CompletionService 创建多线程,并返回全部线程处理结束后的结果
- shell 加密
- show engine innodb status发现deadlock
- Git简易教程
- android的Context Menu菜单
- ffmpeg不是线程安全的
- [异步][事务][流程][设计]同步当场处理并返回处理结果,异步后如何返回. 如何解决?
- 【Android UI界面】ListView与arrays.xml结合使用的问题
- framework新增jar包
- cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
- MyEclipse运行java程序,如何向main方法注入args参数?
- HTTP 报文格式
- 函数参数是类对象时,特殊的用法!
- Android自定义ActionBar
- Cocos2dx 3.0 过渡篇(十八) Cocos2d-x 3.0rc,又一种创建项目方式