首页 > 其他分享 >消息队列详解

消息队列详解

时间:2023-08-03 10:35:07浏览次数:39  
标签:订阅 服务 队列 业务 Topic 详解 消息

文章目录
1、什么是消息队列
2、消息队列特点
3、消息队列的的传输模式
4、常用的消息队列
1、什么是消息队列
消息队列一般简称为 MQ (Messges Queue),是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,是在消息的传输过程中保存消息的容器。消息队列本质上是一个队列,而队列中存放的是一个个消息。

队列是一个数据结构,具有先进先出的特点。而消息队列就是将消息放到队列里,用队列做存储消息的介质。消息的发送放称为生产者,消息的接收方称为消费者。

消息队列由 Broker(消息服务器,核心部分)、Producer(消息生产者)、Consumer(消息消费者)、Topic(主题)、Queue(队列)和Message(消息体)组成。

2、消息队列特点
消息队列有三个作用,分别是削峰、解耦和异步。

流量削峰:主要用于在高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。

假设系统只能处理1000个请求,但这时突然来了3000个请求,如果不加以限制就会造成系统瘫痪。使用消息队列做缓冲,将多余的请求存放在消息队列中,等系统根据自己处理请求的能力去消息队列去。

应用解耦:主要用于当一个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理时,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。

假设某个服务 A 需要调用服务 B,但是服务 B 突然出现问题,这样会导致服务 A 也会出现问题。如果使用消息队列,当服务 A 执行完成之后,发送一条消息到队列中,服务 B 读取到这条消息,那么它立刻开始进行业务的执行。

异步通信:主业务执行结束后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验。

假设有一个业务,要先执行服务 A ,然后服务 A 去调用服务 B ,当服务 B 完成之后,服务 A 调用服务 C,这个业务需要一步步走下去。当使用了消息队列之后,服务 A 完成之后,可以同时执行服务 B 和 服务 C ,这样就减低业务的响应时间,提高用户体验。

3、消息队列的的传输模式
点对点模式:用于消息生产者和消息消费者之间点到点的通信。

消息生产者将消息发送到Queue(队列)中,然后消息消费者从Queue(队列)找取出消息,当消息被消费之后就从Queue(队列)中删除,消息只能被一个消息消费者使用。

发布/订阅模式:消息生产者向一个特定的Topic(主题)生产消息。0或多个订阅了该Topic(主题)的消息消费者,接收Topic(主题)的消息, 在这种情况下发布者和订阅者彼此不知道。

消息生产者和消息消费者只有建立了订阅关系才能收到消息。Topic(主题)实现了发布和订阅,当消息生产者发布一个消息,所有订阅这个Topic(主题)的服务都能得到这个消息。

有两种订阅类型:

持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线;
非持久订阅:订阅者为了接受消息,必须一直在线。 当只有一个订阅者时约等于点对点模式
4、常用的消息队列
ActiveMQ:是Apache下的一个子项目。

优点:单机吞吐量每秒万级,时效性毫秒级,可用性高,基于主从架构实现高可用性,消息可靠性较低的概率丢失数据。支持多种语言、支持Spring2.0的特性、支持多种传送协议、支持通过JDBC和journal提供高速的消息持久化。

缺点:官方社区现在的维护越来越少;社区活跃度不高。

Kafka:是一个分布式消息发布订阅系统。为大数据而生的消息中间件,大数据的杀手锏

优点:单机吞吐量每秒百万级,时效性毫秒级,不会丢失数据,不会导致不可用

缺点:支持消息顺序,但是一台代理宕机后,就会产生消息乱序;消费失败不支持重试;社区更新较慢

RocketMQ:阿里系下开源的一款分布式、队列模型的消息中间件,3.0版本名称改为RocketMQ,是阿里参照 kafka 设计思想使用 java 实现的一套消息队列。

优点:单机吞吐量十万级,时效性毫秒级,消息可以做到 0 丢失,支持 10 亿级别的消息堆积

缺点:支持的客户端语言不多,目前是 java 及 c++;社区活跃度一般;

RabbitMQ:是使用Erlang编写的一个开源的消息队列

优点:单机吞吐量万级,时效性微秒级,支持多种语言

标签:订阅,服务,队列,业务,Topic,详解,消息
From: https://www.cnblogs.com/dpf-learn/p/17602600.html

相关文章

  • 算法-10--python shuffle函数_python中shuffle()方法的功能详解
     pythonshuffle函数_python中shuffle()方法的功能详解: python的概率分布中,洗牌算法是通过shuffle()方法实现的,shuffle()方法将列表的所有元素打乱,随机排列。Python既可以使用random.shuffle对列表进行洗牌,也可以使用random.shuffle随机播放字符串列表,本文向大家介绍python中......
  • 客服如何通过微信接收消息通知-唯一客服文档中心
    当我们在自己网站上嵌入对接了客服代码,我们想要通过微信接收访客的消息提醒通知,可以通过扫描客服后台的微信二维码,即时收消息通知提醒。我们网站地址:gofly.v1kf.com客服后台后台主页面板,就展示了一个微信二维码,扫码关注公众号,就能将客服账号与微信公众号进行绑定,通过微信公众号......
  • seaborn的详解-线性关系04
    线性关系可视化许多数据集都有着众多连续变量。数据分析的目的经常就是衡量变量之间的关系,我们之前介绍了可以绘制双变量分布的函数。然而,使用统计模型来估计两个噪声观测组之间的简单关系可能是非常有帮助的。我们在这一章中讨论的函数功能将在线性回归的框架实现。 请注意,seabor......
  • Nginx详解
    Nginx:强大的Web服务器和反向代理服务器一、简介Nginx是一款开源的Web服务器和反向代理服务器,广泛应用于互联网应用和网络托管领域。其具有高可靠性、高性能和高扩展性,能够轻松处理大量并发请求,保证服务器资源的有效利用和网络流量的均衡分配。Nginx的主要特点包括高效的事件处理机......
  • MySQL内存分配详解
    InnoDB存储引擎层基础内存分配如果在编译MySQL的时候不开启FPS的监控,InnoDB对动态内存(heap)的分配和释放使用基础的new、delete、malloc、free等。默认InnoDB对内存的分配和回收会添加FPS的监控模块。InnoDB对动态内存(heap)的分配和回收使用封装后的函数,主要在ut_allocator类中实......
  • 基础 | 详解3D结构光如何标定
    结构光视觉的优点:非接触、信息量大、测精度高、抗干扰能力强。结构光视觉传感器参数的标定包括:摄像机参数标定、结构光平面参数标定。结构光视觉测量原理图我们不考虑镜头的畸变,将相机的成像模型简化为小孔成像模型,则特征点的图像坐标Pf与其在摄像机坐标系下的三维坐标P之......
  • 请求头详解——Headers
    请求头定义:客户端,即浏览器通过输入url后确定等于做了一次向服务器的请求动作,在这个请求里面带有请求参数,请求参数的集合即为请求头。请求头的参数(常用的):Accept:浏览器可接收的文件类型Accept-Charset:浏览器可以接收的编码类型Accept-Encoding:浏览器可以接收的压缩编码类型Ac......
  • maven-resources-plugin详解
    核心资料来源:maven-resources-plugin详解(csdn.net)maven-resources-plugin到低在什么场景下使用?他到底有什么作用?他和pom当中配置的resources标签又有什么关联?为什么有的项目使用了该插件而有的却没有?resources当中的filtering标签到低是干什么的?maven怎么打包过滤文件?......
  • 镭拓详解塑料激光焊接机在汽车车灯塑料焊接上的应用
    编辑:镭拓激光随着激光焊接技术的快速发展与进步,激光技术应用深入到各个领域,尤其是在高精密制造业领域。比如汽车制造行业上,激光焊接技术的应用更为深刻和重要。不过很多人可能不知道是,汽车制造业使用到的激光焊接技术可不仅仅是一种。你激光焊接技术只是用在汽车车上的金属材料焊接......
  • git如何上传本地代码文件到git仓库【图文详解】
    第一步:新建代码库第二步:复制仓库地址第三步:在本地文件夹内右击,通过GitBashHere进入命令窗口,克隆复制的仓库地址    第四步:将你的项目添加至该文件夹下,通过命令进行添加至仓库主要命令1:gitinit(初始化仓库)2:gitadd.(这里的.表示添加所有文......