探讨实现可靠的消息服务
导读 | 分布式事务往往是服务化的痛点,很多场景通过业务避免了分布式事务,但是还是存在一些场景必须依赖分布式事务,下面来讲讲如何处理分布式事务 |
解决分布式事务问题的方法有很多种,网上有很多博客也提供了各种解决方案。总结起来,一般可以分为以下两种方式: 1. 两阶段提交(Two-Phase Commit,简称2PC):这是一种常见的分布式事务解决方案。在这种方法中,协调者节点负责协调参与者节点的操作,并确保所有节点在提交或者回滚时达成一
刚性分布式事务和两阶段提交是一种实现强一致性的机制。 刚性分布式事务是指在分布式系统中,多个参与者节点执行的一系列操作需要保证原子性,即要么全部成功,要么全部失败。这种机制要求所有参与者节点在事务执行过程中遵循相同的协议,通过协调者节点的指导来实现事务的
柔性分布式事务是一种在分布式系统中处理事务的方法。它采用最大努力提交的策略,即尽最大努力去完成事务的提交,但是也允许部分操作失败。在柔性分布式事务中,通常会使用TCC(Try-Confirm-Cancel)模式来实现事务的管理。TCC模式将事务分解为三个阶段:尝试(Try)、确认(Confirm)和取消(
首先解决分布式事务前提保障:接口必须幂等性,防止消息重复发送对业务影响
二 可靠消息系统设计(这个感觉不错比较简单,就拿来分享下)如上图
开始执行 比如:
try{
if(prepare()) { //预发送阶段
doService(); //执行业务逻辑
updateMsgStatus();//更新消息为确认状态
}
}
1 预发送消息,try阶段,如果预发送消息失败了,业务还未执行,所以 系统A,B还是一致性的 不需要处理
这一点容易理解
2 预发送消息成功了,开始执行业务逻辑。执行成功 更新预发送消息转态为确认发送。如果 此时 业务逻辑执行失败了,那预发送消息就不会跟新状态,此时消息确认系统就开启工作,到业务系统1上回查此消息状态,此时发现业务执行失败了,就更新预发送状态至失败状态。
3 如果此时 业务执行成功了消息也被更新成确认发送了 那就ok 完美。如果消息更新失败,还是由消息确认系统回查转态 更新此消息被删除状态还是确认发送状态。
4 消息者开始消费
1> 比如消费失败了,此时产生不一致, 消息恢复系统检测消息状态,重新发送消息
2>如果执行业务失败了,此消息也就不会被确认了,还是由消息恢复系统检测消息状态,重新发送消息
3>如果ask失败了,还是以上逻辑重新发送上诉重新发送当然有次数限制,不能一直发送,超过最大次数就要进入死信队列,等待人工干预了
4> ask成功,消息也就成功消费了,完美,解决了消息可靠服务
三 努力提交这个比较简单 ,将失败的消息重复提交,实时性比较弱的一些场景,确保消息推送成功。
比如交易完成推送第三方消息。 此时可以使用努力提交
以上是探讨实现可靠的消息服务的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

在Docker环境中使用PECL安装扩展时报错的原因及解决方法在使用Docker环境时,我们常常会遇到一些令人头疼的问�...

在LAMP架构下整合Node.js或Python服务许多网站开发者都面临这样的问题:已有的LAMP(Linux Apache MySQL PHP)架构网站需要...

在macOS上将apscheduler定时任务配置为服务在macOS平台上,如果你想将apscheduler定时任务配置为一个服务,类似于ngin...

语言多线程可以大大提升程序效率,C 语言中多线程的实现方式主要有四种:创建独立进程:创建多个独立运行的进程,每个进程拥有自己的内存空间。伪多线程:在一个进程中创建多个执行流,这些执行流共享同一内存空间,并交替执行。多线程库:使用pthreads等多线程库创建和管理线程,提供了丰富的线程操作函数。协程:一种轻量级的多线程实现,将任务划分成小的子任务,轮流执行。

关于Linux系统自带Python解释器的删除问题许多Linux发行版在安装时会预装Python解释器,它并非通过软件包管理器�...

要打开 web.xml 文件,可以使用以下方法:使用文本编辑器(如记事本或 TextEdit)使用集成开发环境(如 Eclipse 或 NetBeans)使用命令行编辑命令(Windows:notepad web.xml;Mac/Linux:open -a TextEdit web.xml)
