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

mq的作用

使用mq优点

mq是一种常见的中间件,在项目中经常用到,它具有异步、解耦、削峰填谷的作用。

异步

比如下单流程,A服务—>B服务,总的耗时是A耗时时间+B耗时时间,而改为A—>mq---->B后,A发送mq后立刻返回,不需要等待B,A与B之间从同步改为了异步,当B是个外部服务且比较耗时时,可考虑。实践中,如果消息消费依赖事务提交,可使用TransactionSynchronizationManager,确保提交事务先于消费消息。

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {@Overridepublic void afterCommit() {//发送qm}});

解耦

还是上边的例子,A服务中硬编码调用B服务,如果还有其他,C服务、D服务等,都要硬编码,代码耦合。使用mq后,A只管发送mq,其他消费者订阅就可以了,A不需要知道B、C、D的存在,如果后边再加入E、F,A服务也不需要改代码。比如订单支付后,要更改积分、更改库存、更改物流状态,那么就可以使用消息的发布-订阅模式,达到解耦。

削峰填谷

大体看了下,常见的mq实现,rabbitmq、kafak、rocketmq至少支持1w/s+的tps,但数据库就没有这么大的处理能力了,还是下单流程,订单数据可以先存到mq中,立刻返回,可以慢慢消费消息落到数据库。

mq的缺点

mq引入后,会有以下缺点。

  • 新引入了中间件,增加了运维负担。
  • 生产者确保消费发送到mq server
  • mq server确保消费者收到
  • 消费者重复消费。

MQ常见的几种模式

  • 发布/订阅:同一个topic下的消息,会被所有的订阅者消费;
  • 点对点:消息只会被一个消费者消费。

市面上常见mq对比

kafka、rabbitmq、rocketmq

  • kafka会将数据写入磁盘缓存,所以存在丢失的情况,常用于日志,因为日志丢失一些也不会产生错误。
  • rabbitmq,支持AMQP协议、JMS,每秒几万,支持消息确认、
  • rocketmq,阿里出品的企业级mq中间价,经历了双11等电商大促,JMS,每秒十几万,想要的功能基本都支持,具体可参考Why choose RocketMQ
http://www.lryc.cn/news/263034.html

相关文章:

  • AUTOSAR组织引入了Rust语言的原因是什么?有哪些好处?与C++相比它有什么优点?并推荐一些入门学习Rust语言链接等
  • 基于PyCharm实现串口GUI编程
  • 【1.8计算机组成与体系结构】磁盘管理
  • 1663:【 例 1】取石子游戏 1
  • Django去访问web api接口Object of type Session is not JSON serializable
  • 每日一题,二维平面
  • 【jupyter notebook】jupyter notebook 调用另一个jupyter notebook 的函数
  • Linux--学习记录(3)
  • 自然语言处理阅读第一弹
  • Spring Boot+Mybatis设置sql日志打印
  • 步进电机电流设置的3种方法
  • uniapp-使用返回的base64转换成图片
  • 有机面条市场分析:到2026 年的复合年增长率为 5.4%
  • 广州设计周落幕|值得被歌颂的奥力斯特岩板
  • WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)
  • Docker介绍,Docker安装
  • CLIP 对比学习 源码理解快速学习
  • 6.鸿蒙app_hap_DevEco如何真机调试模式_app安装在手机中
  • 【JVM从入门到实战】(八)垃圾回收(1)
  • LeeCode前端算法基础100题(12)-删除有序数组中的重复项
  • MATLAB图解傅里叶变换(初学者也可以理解)
  • uni-app 用于开发H5项目展示饼图,使用ucharts 饼图示例
  • 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)
  • JDK bug:ciObjectFactory::create_new_metadata
  • Flink系列之:Over聚合
  • Java开发工具积累(符合阿里巴巴手册规范)
  • SiLM5350MDBCA-DG车规级隔离驱动芯片,我们能为汽车智能提供什么?
  • 【开题报告】基于SpringBoot的企业财务管理系统的设计与实现
  • 【C盘清理】Jetbrains全家桶(PyCharm、Clion……)更改 IDE 特定文件(配置、缓存、插件、日志等)存储位置