假设有个场景:

下单成功需要给用户发送消息通知,发送消息通知通过mq实现

事务提交前发送mq消息

step1:start transaction
step2:生成订单
step3:投递消息到mq
step4:commit transaction

问题:

step3发生异常会导致step4失败,下单失败,直接影响到下单业务

step4发生异常,其他step成功。事务回滚下单失败,但是却发送了成功消息。

事务之后发送消息

step1:start transaction
step2:生成订单
step3:commit transaction
step4:投递消息到mq

问题:

step4发生异常,其他step成功。下单成功,但是发送消息失败。

定时轮训发送消息

step1:start transaction
step2:生成订单
step3:本地库中插入一条需要发送消息的记录t_msg_record
step3:commit transaction
step5:新增一个定时器,轮询t_msg_record,将待发送的记录投递到mq中

问题:

这种方式借助了数据库的事务,业务和消息记录作为了一个原子操作。业务成功之后,消息日志必定是存在的。

业务单一的情况下没问题,不方便扩展。

消息服务

step1:生成一个全局唯一业务消息id,调用消息服务,将消息落地入库,此时消息的状态为待发送状态,返回消息id
step2:start transaction
step3:生成订单
step4:当前事务库插入一条日志(将step3中的业务和bus_msg_id关联起来)
step5:commit transaction
step6:如果上面都成功,调用消息服务,将消息投递到mq中。如果上面有失败的情况,则调用消息服务取消消息的发送

若step6失败,消息将处于待发送状态,此时业务方需要提供一个回查接口(通过业务消息id查询),验证业务是否执行成功。消息服务需新增一个定时任务,对于状态为待发送状态的消息做补偿处理,检查一下业务是否处理成功,从而确定消息是投递还是取消发送。

rocket mq 监听端口_浅谈业务流程中的mq使用方式相关推荐

  1. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇

    JMeter是性能测试中被普遍使用的一种工具,常用于压力测试.该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求.消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软 ...

  2. java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?

    作者:Mr林_月生链接:https://www.jianshu.com/p/3ab10c8685b5 现象 直接上图 可以发现,本地没监听50000端口的服务,但是尝试连接本地50000端口时,却能成 ...

  3. xshell监听端口_监听端口修改_笨办法学Linux 远程访问 (原理、实践、记录与排错)-视频课程_Linux视频-51CTO学院...

    聪明人下笨功夫.本课程所倡导"笨办法"的核心是: ● 深入理解原理 ● 精读man帮助.官方文档- ● 做所有的实验,尽量不要复制粘贴! ● 详细记录实验过程 ● 使用思维导图等辅 ...

  4. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python的re2和re区别_浅谈Python中re.match()和re.search()的使用及区别

    1.re.match()fvk免费资源网 re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.fvk免费资源网 包含的参数如下: ...

  6. python读取图像数据流_浅谈TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  7. swift 引用其他类_浅谈swift中闭包修饰符 weak?unowned? 或什么都不用

    浅谈swift中闭包修饰符 weak?unowned? 或什么都不用 平常的开发中,clourse是我们iOSr绕不过去的坎儿. 苹果本身也很重视闭包,像之前的一些老的target-action类型的 ...

  8. python命名规则数字开头的成语_浅谈Python中带_的变量或函数命名

    搜索热词 Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就 ...

  9. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

最新文章

  1. 堆,栈,内存泄露,内存溢出介绍
  2. 一种解决 MacBook 里的 App Store 无法登录的问题
  3. python用另一个字段替代本字段的null_Python中的数据库
  4. 安装openstack时遇到的错误
  5. 数据解读京东上最受欢迎的面包
  6. 批量标准化BN方法简介【避免了梯度消失和梯度爆炸、加速网络的收敛、优化网络结构】
  7. VCL已死,RAD已死(插播)
  8. 运算除法的计算机函数,2、Python基础--除法、常用数学函数(示例代码)
  9. Zabbix 监控网站的访问量
  10. 自己本地如何玩redis_如何把win10系统本地磁盘图标更改为自己的照片
  11. 利用公共手机获取短信验证码
  12. !!只保留文本中的中英文和符号.,其余都删除
  13. 3个千兆WAN口和24个千兆交换LAN口,电信级高稳定性安全路由
  14. html5适配屏幕,HTML5屏幕适配标签设置
  15. 农村信用社计算机类资料,农村信用社笔试复习资料:计算机知识(3)
  16. 【前端监控系统】埋点数据上报的3种方式
  17. C# 日期插入access数据库
  18. 布斯(booth)乘法详解和例子
  19. jvarkit包问题反馈:构建失败第1类错误详细分析
  20. Flutter--简易的原神角色培养计算器

热门文章

  1. response.end后抛了异常_(七)异常处理
  2. c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. linux基础操作与实践,Linux操作系统基础与实践
  4. centos8安装MySQL依赖_centos8安装mysql8
  5. python打乱顺序的洗牌函数
  6. Qt中修改应用程序和标题栏的图标
  7. MFC中给单文档程序添加背景图片
  8. Effective Java~36. 用EnumSet 代替位域
  9. webapp入门到实战_web前端入门到实战:前端高手在CSS 开发效率的必备片段
  10. java炸弹人素材_炸弹人图片_炸弹人模板_炸弹人设计素材下载