Messges Queue消息队列详解

 更新时间:2023年07月31日 11:15:17   作者:悦.L  
这篇文章主要介绍了Messges Queue消息队列详解,消息队列一般简称为 MQ,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,是在消息的传输过程中保存消息的容器,需要的朋友可以参考下

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编写的一个开源的消息队列
    • 优点:单机吞吐量万级,时效性微秒级,支持多种语言

到此这篇关于Messges Queue消息队列详解的文章就介绍到这了,更多相关消息队列详解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring的循环依赖、三级缓存解决方案源码详细解析

    Spring的循环依赖、三级缓存解决方案源码详细解析

    这篇文章主要介绍了Spring的循环依赖、三级缓存解决方案源码详细解析,在Spring中,由于IOC的控制反转,创建对象不再是简单的new出来,而是交给Spring去创建,会经历一系列Bean的生命周期才创建出相应的对象,需要的朋友可以参考下
    2024-01-01
  • Mybatis select记录封装的实现

    Mybatis select记录封装的实现

    这篇文章主要介绍了Mybatis select记录封装的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 浅谈十个常见的Java异常出现原因

    浅谈十个常见的Java异常出现原因

    这篇文章主要介绍了十个常见的Java异常出现原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java多线程之readwritelock读写分离的实现代码

    Java多线程之readwritelock读写分离的实现代码

    这篇文章主要介绍了Java多线程之readwritelock读写分离的相关内容,文中涉及具体实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java中Color和16进制字符串互相转换的方法

    Java中Color和16进制字符串互相转换的方法

    这篇文章主要给大家介绍了关于Java中Color和16进制字符串互相转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • java的Guava工具包介绍

    java的Guava工具包介绍

    Java开发的同学应该都使用或者听说过Google提供的Guava工具包。日常使用最多的肯定是集合相关的工具类,还有Guava cache,除了这些之外Guava还提供了很多有用的功能,鉴于日常想用的时候找不到,这里就梳理一下Guava中那些好用的工具类,想优化代码的时候不妨过来看看
    2021-04-04
  • springboot整合websocket后启动报错(javax.websocket.server.ServerContainer not available)

    springboot整合websocket后启动报错(javax.websocket.server.ServerCont

    这篇文章主要介绍了springboot整合websocket后启动报错(javax.websocket.server.ServerContainer not available),通过分析错误信息、排查代码和配置,找出问题的根源,并给出相应的解决方案,感兴趣的可以了解一下
    2024-01-01
  • Java实现定时器的4种方法超全总结

    Java实现定时器的4种方法超全总结

    对于一些特殊的代码是需要定时执行的,下面来看看定时器该如何编写吧,下面这篇文章主要给大家介绍了关于Java实现定时器的4种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • spring boot实战教程之shiro session过期时间详解

    spring boot实战教程之shiro session过期时间详解

    这篇文章主要给大家介绍了关于spring boot实战教程之shiro session过期时间的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-10-10
  • Java上传文件到服务器指定文件夹实现过程图解

    Java上传文件到服务器指定文件夹实现过程图解

    这篇文章主要介绍了Java上传文件到服务器指定文件夹实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论