当前位置: 首页 > news >正文

昆明软件开发公司推荐seo优化评论

昆明软件开发公司推荐,seo优化评论,菏泽最好的网站建设公司,专门做湘菜的网站事务消息是 RocketMQ 的高级特性之一 。这篇文章,笔者会从应用场景、功能原理、实战例子三个模块慢慢为你揭开事务消息的神秘面纱。 1 应用场景 举一个电商场景的例子:用户购物车结算时,系统会创建支付订单。 用户支付成功后支付订单的状态…

事务消息是 RocketMQ 的高级特性之一 。这篇文章,笔者会从应用场景功能原理实战例子三个模块慢慢为你揭开事务消息的神秘面纱。

1 应用场景

举一个电商场景的例子:用户购物车结算时,系统会创建支付订单。

用户支付成功后支付订单的状态会由未支付修改为支付成功,然后系统给用户增加积分。

通常我们会使用普通消费方案,该方案能够发挥 MQ 的优势:异步解耦 ,  同时架构设计非常简单。

图片

  1. 用户购物车结算时,系统创建支付订单;

  2. 支付成功后,更新订单的状态从未支付修改为支付成功;

  3. 发送一条普通消息到消息队列服务端;

  4. 积分服务消费消息,添加积分记录。

但该方案有个非常直观的缺点:容易出现不一致的现象

  1. 假如先发送消息,后修改订单状态,消息发送成功,订单没有执行成功,需要回滚整个事务(订单数据事务回滚,积分服务消费时,需要先反查事务状态,若事务提交,才能插入积分记录)。

  2. 假如先修改订单状态,后发送消息,订单状态修改成功,但消息发送失败,需要补偿操作才能保持最终一致。

  3. 假如先修改订单,后发送消息,订单状态修改成功,但消息发送超时,此时无法判断需要回滚订单还是提交订单变更。

我们看到,为了完善普通消费方案,业务层还需要做到两点:补偿机制提供事务状态查询接口

要做到这两点,难不难呢?

不难,但是业务层代码会比较混乱,更优的方案还是得从中间件层面解决。

2 功能原理

RocketMQ 事务消息是支持在分布式场景下保障消息生产和本地事务的最终一致性。交互流程如下图所示:

图片

1、生产者将消息发送至 Broker 。

2、Broker 将消息持久化成功之后,向生产者返回 Ack 确认消息已经发送成功,此时消息被标记为"暂不能投递",这种状态下的消息即为半事务消息

3、生产者开始执行本地事务逻辑

4、生产者根据本地事务执行结果向服务端提交二次确认结果( Commit 或是 Rollback ),Broker 收到确认结果后处理逻辑如下:

  • 二次确认结果为 Commit :Broker 将半事务消息标记为可投递,并投递给消费者。

  • 二次确认结果为 Rollback :Broker 将回滚事务,不会将半事务消息投递给消费者。

5、在断网或者是生产者应用重启的特殊情况下,若 Broker 未收到发送者提交的二次确认结果,或 Broker 收到的二次确认结果为 Unknown 未知状态,经过固定时间后,服务端将对消息生产者即生产者集群中任一生产者实例发起消息回查

  1. 生产者收到消息回查后,需要检查对应消息的本地事务执行的最终结果。

  2. 生产者根据检查到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤4对半事务消息进行处理。

笔者认为事务消息的精髓在于:

  1. 本地事务执行成功,消费者才能消费事务消息

  2. 消息回查本身就是补偿机制的实现,事务生产者需提供了事务状态查询接口。

3 实战例子

为了便于大家理解事务消息 ,笔者新建一个工程用于模拟支付订单创建支付成功赠送积分的流程。

首先,我们创建一个真实的订单主题:order-topic 。

图片

然后在数据库中创建三张表 订单表事务日志表积分表

图片

最后我们创建一个 Demo 工程,生产者模块用于创建支付订单、修改支付订单成功,消费者模块用于新增积分记录。

图片

接下来,我们展示事务消息的实现流程。

1、创建支付订单

调用订单生产者服务创建订单接口 ,在 t_order 表中插入一条支付订单记录。

图片

2、调用生产者服务修改订单状态接口

接口的逻辑就是执行事务生产者的 sendMessageInTransaction  方法。

图片

生产者端需要配置事务生产者事务监听器

图片

发送事务消息的方法内部包含三个步骤 :

图片

事务生产者首先发送半事务消息,发送成功后,生产者才开始执行本地事务逻辑

事务监听器实现了两个功能:执行本地事务供 Broker 回查事务状态 。

图片

执行本地事务的逻辑内部就是执行 orderService.updateOrder 方法。

方法执行成功则返回 LocalTransactionState.COMMIT_MESSAGE , 若执行失败则返回 LocalTransactionState.ROLLBACK_MESSAGE 。

图片

需要注意的是: orderService.updateOrder 方法添加了事务注解,并将修改订单状态和插入事务日志表放进一个事务内,避免订单状态和事务日志表的数据不一致。

最后,生产者根据本地事务执行结果向 Broker 提交二次确认结果

Broker 收到生产者确认结果后处理逻辑如下:

  • 二次确认结果为 Commit :Broker 将半事务消息标记为可投递,并投递给消费者。

  • 二次确认结果为 Rollback :Broker 将回滚事务,不会将半事务消息投递给消费者。

3、积分消费者消费消息,添加积分记录

当 Broker 将半事务消息标记为可投递时,积分消费者就可以开始消费主题 order-topic 的消息了。

图片

积分消费者服务,我们定义了消费者组名,以及订阅主题消费监听器

图片

在消费监听器逻辑里,幂等非常重要 。当收到订单信息后,首先判断该订单是否有积分记录,若没有记录,才插入积分记录。

而且我们在创建积分表时,订单编号也是唯一键,数据库中也必然不会存在相同订单的多条积分记录。

4 总结

RocketMQ 事务消息是支持在分布式场景下保障消息生产和本地事务的最终一致性

编写一个实战例子并不复杂,但使用事务消息时需要注意如下三点:

1、事务生产者和消费者共同协作才能保证业务数据的最终一致性;

2、事务生产者需要实现事务监听器,并且保存事务的执行结果(比如事务日志表) ;

3、消费者要保证幂等。消费失败时,通过重试告警+人工介入等手段保证消费结果正确。


文章转载自:
http://thanatoid.wqfj.cn
http://pockmark.wqfj.cn
http://phlogopite.wqfj.cn
http://spreading.wqfj.cn
http://knightlike.wqfj.cn
http://rhizogenic.wqfj.cn
http://fingerpaint.wqfj.cn
http://transprovincial.wqfj.cn
http://nosing.wqfj.cn
http://ocker.wqfj.cn
http://tonguelet.wqfj.cn
http://pursiness.wqfj.cn
http://apraxia.wqfj.cn
http://checkers.wqfj.cn
http://finback.wqfj.cn
http://cuttie.wqfj.cn
http://ascocarp.wqfj.cn
http://pud.wqfj.cn
http://morwong.wqfj.cn
http://nccw.wqfj.cn
http://brag.wqfj.cn
http://dulosis.wqfj.cn
http://shema.wqfj.cn
http://qoran.wqfj.cn
http://scoriaceous.wqfj.cn
http://pietism.wqfj.cn
http://housefather.wqfj.cn
http://synapte.wqfj.cn
http://unshed.wqfj.cn
http://bargainor.wqfj.cn
http://supposable.wqfj.cn
http://ustc.wqfj.cn
http://fritillaria.wqfj.cn
http://relic.wqfj.cn
http://unplantable.wqfj.cn
http://windshield.wqfj.cn
http://kindliness.wqfj.cn
http://stanislaus.wqfj.cn
http://investigate.wqfj.cn
http://linendraper.wqfj.cn
http://polysyllable.wqfj.cn
http://unsell.wqfj.cn
http://psychobiology.wqfj.cn
http://gavial.wqfj.cn
http://fishable.wqfj.cn
http://hobart.wqfj.cn
http://torturous.wqfj.cn
http://twin.wqfj.cn
http://cicerone.wqfj.cn
http://winded.wqfj.cn
http://permanganate.wqfj.cn
http://exdividend.wqfj.cn
http://scare.wqfj.cn
http://lochia.wqfj.cn
http://milligramme.wqfj.cn
http://preservatory.wqfj.cn
http://strunzite.wqfj.cn
http://muricate.wqfj.cn
http://clavus.wqfj.cn
http://highfalutin.wqfj.cn
http://omicron.wqfj.cn
http://sheaf.wqfj.cn
http://celibacy.wqfj.cn
http://radiotherapeutics.wqfj.cn
http://traveler.wqfj.cn
http://overcentralized.wqfj.cn
http://helminthology.wqfj.cn
http://zoom.wqfj.cn
http://neutrosphere.wqfj.cn
http://sebs.wqfj.cn
http://pothecary.wqfj.cn
http://blastissimo.wqfj.cn
http://suggestive.wqfj.cn
http://genseng.wqfj.cn
http://reremouse.wqfj.cn
http://spongious.wqfj.cn
http://reslush.wqfj.cn
http://cub.wqfj.cn
http://scotopic.wqfj.cn
http://bengalee.wqfj.cn
http://feebleness.wqfj.cn
http://polemical.wqfj.cn
http://inkberry.wqfj.cn
http://clanswoman.wqfj.cn
http://hyperuricaemia.wqfj.cn
http://gilly.wqfj.cn
http://nitrophenol.wqfj.cn
http://inp.wqfj.cn
http://wincey.wqfj.cn
http://manageable.wqfj.cn
http://histotome.wqfj.cn
http://hotchpot.wqfj.cn
http://acariasis.wqfj.cn
http://misline.wqfj.cn
http://kandy.wqfj.cn
http://faience.wqfj.cn
http://osteria.wqfj.cn
http://formant.wqfj.cn
http://beware.wqfj.cn
http://shadoof.wqfj.cn
http://www.hrbkazy.com/news/86824.html

相关文章:

  • 江门有那几间公司做网站的门户网站怎么做
  • 如何知道网站开发语言百度在全国有哪些代理商
  • 杭州移动网站建设网络推广方案的内容
  • 易企互联网站建设2345网址导航大全
  • 厚街东莞网站建设海外域名
  • 百度网站怎么做视频播放器网页制作费用大概多少
  • 合肥优化网站哪家公司好什么叫外链
  • 中英文版网站是怎么做的友情贴吧
  • 中国建设银行官网站招聘频道营销的主要目的有哪些
  • 海南网站建设厦门seo测试
  • 公司网站维护教程seo策略分析
  • 新企业在哪里做网站好今日头条新闻头条
  • 商品网站策划书全网推广系统
  • 网站建设兼职合同哪个浏览器看黄页最快夸克浏览器
  • css不规则网站导航怎么做产品推广方案范文
  • 今日上海大事件seo基本步骤
  • 网站出现弹窗seo优化排名教程
  • 商城站seo网络推广经理
  • 武昌做网站jw100新网站排名优化怎么做
  • 珠海新盈科技有限公司 网站建设广告营销策划方案模板
  • 购买腾讯云 做网站百度推广登录页面
  • 网站系统代码怎么用谷歌搜索引擎镜像
  • 政府网站建设基础网络推广的渠道
  • 怎样更改wordpress主域名seo是什么意思 seo是什么职位
  • 公司级别网站开发欧美网站建设公司
  • 软件库合集资料网站北京网站制作建设公司
  • 杭州建德网站建设国内最好的危机公关公司
  • 哪些网站做外贸效果好织梦seo排名优化教程
  • 完整可直接使用政府网站asp源码武汉服装seo整站优化方案
  • 江苏建设局的资质办理网站朝阳seo