消息队列(一)

作者: 灰常出色 | 来源:发表于2019-05-09 20:35 被阅读8次

笔者最近在看消息队列,顺便做了整理,在学习这个知识点之前,笔者问了自己下面几个问题。

什么是消息队列?为什么我们需要消息队列?消息队列有什么用?常用的消息队列有那些?

以下内容,读者便从这几个方面开始说起。

一、什么是消息队列

消息队列(英语:Message queue):是一种进程间通信或同一进程的不同线程间的通信方式,软件贮列用来处理一系列的输入,通常是来自用户。

消息队列提供了异步通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

消息队列常常保存在链表结构中。

二、为什么我们需要消息队列,消息队列有什么用

其实问题二和三,是分不开的,所以笔者放到一起来阐述。

在说这个问题之前,我们需要先看下消息队列的特点,因为有了这些特点,我们才能知道为什么我们需要消息队列。

第一,异步处理,它允许消息在发送很长时间之后,再去处理。

第二,提供了有格式的消息。

第三,提供了存储功能。

解耦合:因为能够提供存储功能,这就可以应用到解耦场景中去,就是让原本相互依赖的生产者和消费者,可以解除掉依赖关系。

常用的例子是订单系统,如下所示:

订单系统每次在请求数据的时候,都依赖与库存系统的返回,成功就是成功,失败就是失败。库存系统有任何风吹草动,订单系统都会受影响,它们之间有很强的依赖关系。

使用了消息队列之后,订单系统只需要往消息队列里面写数据,写完就可以立刻返回。库存系统从消息队列里面读数据,读完就返回。订单系统和库存系统,相互没有依赖性,就算库存系统重启了,重启的这段时间内,订单系统依然可以不受影响。

异步处理:因为有消息队列的存在,生产者在生产完数据之后,会丢到消息队列中,然后返回给生产者成功还是失败。消费者只是从消息队列中消费数据,只要能够消费成功就可以,消费不成功的话,可以通过一些机制保证肯定可以消费成功,例如重试机制。

如此以来,生产者可以更快的获取到返回结果。

例如:下面的例子来自于大型网站架构系列:分布式消息队列(一)

计算在并行工作的情况下,用户从发出请求到得到响应的时间都会是100ms

引入消息队列之后,用户的响应时间会减少到55ms。

流量削峰:在客户端瞬间访问数量过多的时候,很容易导致后端服务器处理不过来挂掉,特别是秒杀业务,例如双十一,前1000个访问用户,可以命中,后续的丢掉。

如此以来,我们可以设置一个1000个消息大小的消息队列,客户端请求的消息到了之后,我们就往里存,只要消息队列满了,我们就丢弃。而后端服务只会从这些消息队列中取数据来消费,如此以来服务端的压力会大大降低。

三、常用的消息队列有那些

有很多消息队列有很多开源的实现,包括JBoss MessagingJORAMApache ActiveMQSun Open Message QueueRabbitMQIBM MQApache QpidApache RocketMQ和HTTPSQS。

后续会选几个常用的消息队列来继续介绍。

参考资料:

消息队列,维基百科

消息队列的使用场景是怎样的?

大型网站架构系列:分布式消息队列(一)


灰子,做于二零一九年五月九日。

相关文章

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • 进程间通信(7)-IPC通信之消息队列

    一、消息队列 消息队列是一种链式队列。 Msqid_ds:维护消息队列的结构体,队列的第一个消息指针msg_fir...

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • java消息机制

    1.什么是消息队列? 1.消息队列是一个队列,先进先出,你无法读取消息队列中间的消息,只能按照顺序,从消息队列的头...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • (一)消息队列

    引用:https://www.cnblogs.com/tianqing/p/7110468.html 消息队列都应...

  • 消息队列一

    消息队列有两种模式,一种是队列模式,一种订阅-发布模式. 队列模式就是一个点对点,生产者生产消息发入到队列,然后消...

  • 消息队列(一)

    为什么要用Message Queue 解耦在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理...

  • 消息队列(一)

    笔者最近在看消息队列,顺便做了整理,在学习这个知识点之前,笔者问了自己下面几个问题。 什么是消息队列?为什么我们需...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

网友评论

    本文标题:消息队列(一)

    本文链接:https://www.haomeiwen.com/subject/xtaioqtx.html