`

消息队列入门理解

阅读更多

消息队列(Message Queue)允许应用程序通过相互之间发送消息来通信。消息队列在目标队列繁忙的时候,提供一个临时的消息存储。

 

下面我将从以下几个方面来介绍消息队列。

1、什么是消息队列?

2、使用消息队列可以带来什么好处?

3、消息队列的基本分类

 

一、什么是消息队列?

队列是一个线性的先进先出的等待处理的事物的集合。消息队列是在两个应用之间发送的消息的队列。它包含一系列等待被处理的工作对象。

 

消息是指在发送者和接受者之间传递的数,它本质上是有着特定格式的字节数组。消息可能是告诉一个系统开始处理或者完成处理某个任务的信息,或者一个平常的信息。


 
最基本的消息队列的架构是非常简单的:有一个生产者客户端,它负责创建消息并且把消息传递给队列;还有一个被称为消费者的应用程序,它连接到队列并且获取消息进行处理。队列中的消息在消费者获取之前会一直在队列中存储的。

 

 

 

 

 

 

 

 

 

 

 

 

 

二、使用消息队列的好处

1、异步处理

 

消息队列提供了一个异步的通信协议,生产者需要处理程序马上返回处理结果。电子邮件或许是最好异步消息最好的例子:当一封电子邮件被发送出去以后,发送者可以继续做其他的事情,而不需要立即等到接收者的响应。因此,这种方式解耦了生产者和消费者之间的关联,生产者和消费者不是必须要同时和消息队列进行交互。

 

2、解耦合(DECOUPLING)

 

解耦用于描述一个系统对另一个系统的的依赖性,并且解耦是把两个系统独立开来,从而使他们的功能更加高内聚。

一个解耦的系统可以做到两个或者更多的系统之间无需要建立连接就可以通信,因此系统之间可以保持完全自主和对其他系统的透明性。解耦合通常也是一个计算机系统的良好架构的标识,这样的系统更加容易维护、扩展和调试。

当消费程序出现问题的时候,生产者依然可以把消息放入队列中,因此生产者并不受影响,待消费者恢复正常以后继续处理就可以。

 

3、架构清晰简单

 

使用了消息队列的架构设计,使生产者和消费者之间的职责和关系更加清晰,减少了逻辑处理的复杂性;另外对于提高并发性和线程安全的架构设计要简单了很多,不需要更多的锁机制。

 

4、可扩展(SCALABILITY)

 

可扩展性是对于上游和下游更加简单了,随着业务的发展,消息的量级肯定也在逐渐的增加。若不适用消息队列,当数据量少的时候是很容易处理的,但是当达到一定的数量级,大数据量对架构的要求会很高的。可以通过消息队列的形式解决一部分问题,这种生产者消费者模式如果想要做扩展,核心的模块则是在消息队列上,生产者和消费者端的架构扩展是很容易的。因此,各大互联网公司都再自己的消息队列上下了很大精力。

 

三、消息队列的基本分类

消息队列无论是简单的还是复杂的,是单机的还是分布式的,从生产者和消费者之间的关系来说,我把其分为两种:

 

1、点对点消息队列

生产者和消费者之间是一对一的关系,这些消息的生产是专门为了一个消费者服务的。

比如我现在的系统有从Gateway系统接收实时的用户在京东浏览商详页的信息,因此我们通过Redis Queue实现了消息队列。当gateway写入数据以后,我这边消费完成,数据就会被从队列中移除不会再继续保存。

其模型如下:

 

 

 

 2、发布/订阅模式(Pub/Sub)

 这种模式的使用场景一般为生产者提供的是基础业务的数据,对于上层业务会有不止一个消费者。因此,发布/订阅 模式保证了各个consumer对于消息的使用是相互独立,互不影响的。比如Kafka就是一个典型的Pub/Sub模式的消息队列。

其模型为:

 

 

 

 

 

 参考文档:What is message queueing?

 

 

  • 大小: 33.8 KB
  • 大小: 7.3 KB
  • 大小: 16.5 KB
分享到:
评论

相关推荐

    MQ消息队列简单的发送和接受示例

    适合新手入门学习MQ消息队列,并通过最基本的方式实现p2p模式的消息传递,让新手了解mq最底层的实现方式,方便理解过程。

    栈和队列的源代码 新手入门容易理解

    顺序栈 链栈 迷宫求解 顺序对 链对的代码 容易理解,里面有栈和对的基本操作,如入栈(对)、出栈(对)等。

    MQ入门实例(本地队列&远程队列 两个例子)

    适合新手做MQ的入实验,有助于对MQ的理解!

    RabbitMQ【高效部署分布式消息队列.实战】.rar

    RabbitMQ【高效部署分布式消息队列.实战】本书对RabbitMQ做了全面、翔实的讲解,体现了两位专家的真知灼见。本书首先介绍了有关MQ的历史,然后从基本的消息通信原理讲起,带领读者一路探索RabbitMQ的消息通信世界。...

    MFC教程入门知识全集.rar

    2.1.2 关于消息及消息队列 (图1、图2 没有) 2.2 什么是句柄 2.3 谈谈WinMain 函数 (例子代码EX02-00) 2.3.1 WinMain 函数的定义及功能 2.3.2 窗口及其生成 2.3.2.1 如何设计一个窗口类——步骤1 2.3.2.2 ...

    leetcode伪代码-Queue-Stack:队列&栈的经典题目

    说到队列和栈我们就少不了说深度搜索(DFS)和广度搜索(BFS)当你完成这些题目之后,我相信你一定会对队列和栈以及DFS和BFS有重新的认识,我觉得这些题目才是正真的入门,尽管这些题目的标签都是中等题,但是都很好...

    Winpcap编程入门

    这篇教程将会指引读者逐步了解WinPcap编程, 从简单的基础函数(获取网络接口列表, 捕捉数据包)到更高级的内容(处理发送队列, 网络流量统计). 教程中包括一些代码片断, 以及一些简单但完整的例子, 读者可以参考这些...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    该资料是《Visual C++ 2010入门经典(第5版)》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2010入门经典(第5版) 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2010 原出版社: Wrox 作者: ...

    Visual.C#2010从入门到精通

    7.1.1 队列消息和非队列消息 108 7.1.2 系统消息和应用程序消息 109 7.1.3 窗口消息、命令消息和控件通知 109 7.2 MFC消息映射机制 110 7.2.1 MFC消息处理 111 7.2.2 一个应用程序的消息映射分析 111 7.2.3 MFC消息...

    Websphere MQ入门教程

    4, 了解WebSphere MQ的对象。 5, 描述WebSphere MQ的体系结构。 6, 学习WebSphere MQ的客户机和服务器。 7, 理解WebSphere MQ的触发机制。 8, 学习使用WebSphere MQ的队列管理器群集。

    游戏开发入门教程知识点总结以及技巧点总结.docx

    2.理解数据结构与算法,如数组、链表、栈、队列、哈希表、排序和查找算法等。 3. 游戏引擎 4. 1.学习Unity、Unreal Engine等流行游戏引擎的使用,包括场景搭建、光照、物理系统、粒子系统等。 2.掌握脚本系统,如...

    《UNIX网络编程 第2版. 第2卷, 进程间通信(中文版)》(W·Richard Stevens[美] 著)

    5.8 使用内存映射I/O实现Posix消息队列 85 5.9 小结 101 习题 101 第6章 System V消息队列 103 6.1 概述 103 6.2 msgget函数 104 6.3 msgsnd函数 104 6.4 msgrcv函数 105 6.5 msgctl函数 106 6.6 简单的程序 107 6.7...

    jaeger入门

    本文将讲解jaeger基本概念,基于golang的代码实现以及注入原理 jaeger 概述 详细介绍参见官方文档,jaeger官方文档中文版 组件概念: jaeger-client jaeger-agent 将client发送的span...tags # 不被继承,查询过滤理解

    UNIX网络编程 第2卷 进程间通信

    5.8 使用内存映射I/O实现Posix消息队列 85 5.9 小结 101 习题 101 第6章 System V消息队列 103 6.1 概述 103 6.2 msgget函数 104 6.3 msgsnd函数 104 6.4 msgrcv函数 105 6.5 msgctl函数 106 6.6 简单的程序 107 6.7...

    四种常见数据结构特点、对比和例题比较.md

    不论是数据结构的入门学习还是应用技巧的提高,本文都能提供很好的帮助。 能学到什么: 通过学习可以全面掌握数组、链表、栈和队列这些最常用数据结构的工作原理、实现代码以及应用优势。更能通过设计案例比较学习...

    SpringBootLearning

    SpringBoot非官方教程 | ... 第十二篇:springboot集成apidoc缓存篇SpringBoot非官方教程 | 第十三篇:springboot集成spring cache消息队列SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列 Spri

    爬虫开发技巧总结和入门教程知识点总结.docx

    深度爬虫与广度爬虫:理解两种不同的爬取策略,并能根据需求选择合适的爬取方式。 网络爬虫法律合规:熟悉并遵循各国关于网络爬虫的相关法律法规,尊重版权,不得非法获取和使用受保护的信息。 爬虫策略优化:如...

    Saltstack快速入门简单汇总

    saltsatck优点:首先,速度快,基于消息队列+线程,跑完多台设备,都是毫秒级别的;其次,非常灵活,源码是python,方便理解和自定义模块;最后,命令简单,功能强大。 前言:在很久以前,只有几台主机的时候当然不...

    SpringBootLearn:Spring Boot教程

    SpringBootLearn Spring Boot教程 转载请标明出处: 原文首发于: 本文出自李浩东...SpringBoot详细教程 | 第九篇:Spring Boot整合Redis简单实现消息队列 SpringBoot详细教程 | 第十篇:Spring Boot整合RabbitMQ 邮箱

    kafka-examples:Kafka Consumer,Producer,Streams和Connect API的基本示例

    Apache Kafka是一个流行的分布式发布-订阅消息队列。 请在找到有关Apache Kafka的详细文档。 特别是,您需要阅读有关Apache Kafka的,和。 该存储库将保存Apache Kafka中可用的所有基本API的示例。 我们将为...

Global site tag (gtag.js) - Google Analytics