一、简介

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题;

实现高性能,高可用,可伸缩和最终一致性架构;

使用较多的消息队列有ActiveMQ,RabbitMQ,RocketMQ,Kafka。

二、消息队列使用场景

以下介绍消息队列在实际应用中常用的使用场景。应用解耦,异步处理,流量削锋、日志处理和消息通讯五个场景。

1、应用解耦

场景说明:像我们公司的统一的管理平台系统,与各种子系统打交道。传统的做法是,各个系统调用平台系统的接口。如下图


平台管理系统发送个数据到下面各个子系统,接口调用发送,那如果其他系统也要这个数据呢?那如果HOUP系统现在不需要了呢?现在平台管理系统又要发送第二种数据了呢?平台管理系统负责人估计会奔溃吧。再来点更加崩溃的事儿,平台管理系统要时时刻刻考虑那些子系统如果挂了咋办?我要不要重发?我要不要把消息存起来?负责人估计跑路的心都有了。。。

传统模式的缺点:

  • 假如平台管理系统无法访问,则所有的子系统读取消息将失败。
  • 平台管理系统与各个子系统耦合。

如何解决以上问题呢?引入应用消息队列后的方案,如下图:


引入消息队列的优点:

  • 平台管理系统完成持久化处理,将消息写入消息队列。
  • 各个子系统:采用拉/推的方式,进行消费消息。
  • 假如子系统挂了不能正常使用了,也不影响用户在平台管理系统的正常业务的操作,因为操作完的数据写入消息队列不再关心后续的其他操作了。实现了平台管理系统与各个子系统的应用解耦。

2、异步处理

场景说明:用户对平台发起了一次请求,平台与各个子系统操作各自的数据库来完成用户的这一次请求。

假设用户的这次请求,平台需要HOUP、CMO和CMC三个子系统交互,从图中看出,不难算出用户的这次请求需要的总耗时是:720ms,可能网络波动的时候,可能达到1s。一般的互联网企业,对用户的直接操作,一般要求是200ms以内完成,对用户几乎是无法感知到的,对于很多产品来说,用户体验是至关重要的。

那如何解决这种性能的问题呢?

引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构如下:

引入消息队列后,用户把消息写入消息队列后,直接返回,因此用户的响应时间是:25ms,性能提高了好几倍。

3、流量削锋

应用场景:某个时间点高峰期,大量用户涌入系统进行相应的业务操作。


4、日志处理

以下是新浪kafka日志处理应用案例

(1)、Kafka:接收用户日志的消息队列

(2)、Logstash:做日志解析,统一成JSON输出给Elasticsearch

(3)、Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数据存储服务,通过index组织数据,兼具强大的搜索和统计功能

(4)、Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能力是众多公司选择ELK stack的重要原因

5、消息通讯

消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等

点对点通讯:

客户端A和客户端B使用同一队列,进行消息通讯。

聊天室通讯:

客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。

消息队列的五个使用场景相关推荐

  1. 消息队列的五种使用场景

    场景一:异步处理 场景二:应用解耦 场景三:流量削峰 场景四:日志处理 场景五:消息通讯 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩 ...

  2. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ

    RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...

  3. 消息队列使用的四种场景介绍

    一.简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,Zer ...

  4. 消息队列的四大典型使用场景

    关键词: 消息队列   业务解耦 最终一致性 错峰流控 日志同步 Kafka RabbitMQ 声明:本文并非原创,转自华为云帮助中心的分布式消息服务(DMS)的用户指南.客户端连接方法通用,故摘抄过 ...

  5. python中队列的应用用场景_消息队列使用的四种场景介绍

    四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JavaMessage Service,Java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送.接 ...

  6. 【消息队列】五个问题详解消息中间件

    1.消息中间件是什么 消息队列,又叫做消息中间件.是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程 ...

  7. java onmessage监听消息队列_消息队列(MQ)功能场景

    来自公众号:京东技术 消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法.应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用链接来连接它们.消息传递指的是程序之间通过在消息中发 ...

  8. 面试官:说出八种消息队列的应用场景。啊?八种?

    本文来源于公众号:胖滚猪学编程.转载请注明出处! 一个风度翩翩,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向她走来,看着铮亮的头,胖滚猪心想,这肯定是尼玛顶级架构师吧!完了要挂了. 结果面试官第 ...

  9. 为什么使用消息队列、消息队列优缺点和适用场景?

    一.为什么使用消息队列? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这 ...

最新文章

  1. linux守护实例有什么用,linux中的信号及进程守护的应用实例分享
  2. intellij idea建立maven项目
  3. tf.device()指定tensorflow运行的GPU或CPU设备
  4. elasticsearch不能使用root启动问题解决
  5. Redis 未授权访问缺陷可轻易导致系统被黑
  6. .NET+Sqlite如何支持加密
  7. 编译原理—词法分析器(Java)
  8. 不好意思昨天断更了,今天聊聊创业
  9. Java or PHP? 谈谈高并发网站的技术选型和架构设计
  10. Android中ListView复用导致布局错乱的解决方案
  11. 7.1-7.31推荐文章汇总
  12. vue 组件 not defined_Vue、Spring Boot开发小而完整的Web前后端分离项目实战10
  13. Pixhawk-姿态解算源码注释
  14. 相机变焦与对焦方法及原理
  15. uniapp editor编辑器
  16. 软件测试面试考什么综合素质,综合素质测评都考了啥
  17. Arcgis ToolBOx学习之五——Analysis——Proximity工具
  18. 爬虫时候遇到python connection error max retries exceeded whith url 怎么解决?
  19. 使用lua配置neovim所需的一切
  20. Office噩梦公式远程代码执行漏洞

热门文章

  1. Linux远程连接到MySQL客户端
  2. 青春献给996,晚年相亲夕阳红......
  3. C语言程序输出两行句子,一个语句分写多行是什么意思啊?
  4. linux文件内容的替换
  5. 微信小程序授权登录——获取用户信息
  6. 最接近原生APP体验的高性能前端框架——MUI
  7. UVA 10586(多项式相除取余)
  8. ceph-ansible部署Ceph Pacific版本集群
  9. 计算机二级python 公共基础题总结
  10. H5送鲜花、礼物动画(解决:多个动画同时渲染卡顿问题)