消息队列
来源:互联网 发布:linux cp文件到桌面 编辑:程序博客网 时间:2024/06/07 00:15
应用场景:
- 业务解耦
保证核心流程能够正确梳理,其他非核心流程只要有通知即可
- 最终一致性
“最终一致性”而生的消息队列,如Notify(阿里)、QMQ(去哪儿),设计初衷就是为了交易系统中的高可靠通知
所有跨VM的一致性问题,从技术的角度讲通用的解决方案是:
- 强一致性,分布式事务,但落地太难且成本太高,后文会具体提到。
- 最终一致性,主要是用“记录”和“补偿”的方式。在做所有的不确定的事情之前,先把事情记录下来,然后去做不确定的事情,结果可能是:成功、失败或是不确定,“不确定”(例如超时等)可以等价为失败。成功就可以把记录的东西清理掉了,对于失败和不确定,可以依靠定时任务等方式把所有失败的事情重新搞一遍,直到成功为止。
回到刚才的例子,系统在A扣钱成功的情况下,把要给B“通知”这件事记录在库里(为了保证最高的可靠性可以把通知B系统加钱和扣钱成功这两件事维护在一个本地事务里),通知成功则删除这条记录,通知失败或不确定则依靠定时任务补偿性地通知我们,直到我们把状态更新成正确的为止。
整个这个模型依然可以基于RPC来做,但可以抽象成一个统一的模型,基于消息队列来做一个“企业总线”。
具体来说,本地事务维护业务变化和通知消息,一起落地(失败则一起回滚),然后RPC到达broker,在broker成功落地后,RPC返回成功,本地消息可以删除。否则本地消息一直靠定时任务轮询不断重发,这样就保证了消息可靠落地broker。
broker往consumer发送消息的过程类似,一直发送消息,直到consumer发送消费成功确认。
我们先不理会重复消息的问题,通过两次消息落地加补偿,下游是一定可以收到消息的。然后依赖状态机版本号等方式做判重,更新自己的业务,就实现了最终一致性
- 广播
- 错峰流控
消息队列设计
0 0
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- 消息队列
- <>消息队列
- 消息队列
- 操作系统
- 程序员永远不要再犯的5个编程bug
- 关于iOS横竖屏幕强制转换的问题[强制横屏]
- iOS中 如何将自己的框架更新到cocopods上
- 创业的真谛是顺势而为,借船过海!
- 消息队列
- JAVA学习记录(一)——Number\Character\String\数组\Date\Calendar\GregorianCalendar
- 为什么我们这么期待Kubernetes?
- 选了3个短信平台进行对比
- charCount.js实现输入文字限制
- 关于Win7 64位下:Navicat无法连接64位Oracle 11gR2:Cannot load OCI DLL 87 解决方法
- iOS设计模式(九) 模板方法模式
- iOS Block 和 Delegate 的使用比较
- 18、元素节点的删除与增加