首页 > 其他分享 >【1】消息队列概念

【1】消息队列概念

时间:2024-04-12 13:12:52浏览次数:24  
标签:订阅 处理过程 处理 队列 概念 消息 消息中间件

一、什么是消息队列

消息队列中间件,又称为消息队列或者消息中间件,是在消息的传输过程中保存消息的容器。

二、消息队列模型

JMS规范目前支持两种消息模型:点对点(point to point, queue)和发布/订阅(publish/subscribe,topic)。消息不可重复消费。

2.1、点对点模型

点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能。

2.2、发布/订阅模型

发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题(topic),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。Topic,可以重复消费

三、消息队列的作用

解耦
  在项目启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束即可。
冗余(存储)
  有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到它们已经被完全处理,通过这一方式避免了数据丢失风险。在把一个消息从消息中间件中删除之前,需要你的处理系统明确地指定该消息已经被处理完成,从而确保你的数据被安全地保存直到使用完毕。
扩展性
  因为消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要修改代码,也不需要调节参数。
削峰
  在访问量剧增的情况下,应用依然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用消息中间件能够使关键组件支撑组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩溃。
可恢复性
  当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入消息中间中的消息依然可以在系统恢复后进行处理。
顺序保证
  在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程度上的顺序性。
缓冲
  在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过一个缓冲来帮助任务最高效率执行,写入消息中间件的处理会尽可能快速。该缓冲层有助于控制和优化数据流经过系统的速度。
异步通信
  在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步处理机制,允许应用吧一些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理。

参考资料

参考书籍:RabbitMQ实战指南

  • 作者: DeepInThought
    出处: https://www.cnblogs.com/DeepInThought
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 标签:订阅,处理过程,处理,队列,概念,消息,消息中间件
    From: https://www.cnblogs.com/DeepInThought/p/10982567.html

    相关文章

    • 消息中间件RabbitMQ_RabbitMQ的工作模式4
      一、Workqueues工作队列模式1、模式说明WorkQueues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。2、代码编写WorkQueues与入门程序的简......
    • Kafka做消息队列的原理
      Kafka作为消息队列的实现原理主要基于其分布式架构和日志式存储机制。以下是Kafka作为消息队列工作的核心原理:1.分布式架构与分区:Kafka采用分布式架构,将数据分布存储在多个节点(称为Broker)上,以实现数据的水平扩展和并行处理。Kafka中的消息流被组织成主题(Topic),每个主题可以包......
    • 自编概念补充容器启动流程
      1、初始化流程 ①:如果我想生成bean对象,那么就需要一个beanFactory工厂(DefaultListableBeanFactory);②:如果我想对加了特定注解(如 @Service、@Repository)的类进行读取转化成 BeanDefinition 对象(BeanDefinition 是Spring中极其重要的一个概念,它存储了bean对象的所有......
    • 队列 - 双端队列实现
      之前实现的单端队列,只能从队列的尾部进,头部出.但现在我们来实现一种从两端都可进行出队入队的结构,即双端队列deque.在计算机中,双端队列最常用的一个场景是存储一系列的撤销操作.当然用户点击了某个操作,则此操作会被存在一个双端队列中,类似栈里.当用户点击撤销操......
    • 说说你对栈、队列的理解?应用场景?
      一、栈栈(stack)又名堆栈,它是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表表尾这一端被称为栈顶,相反地另一端被称为栈底,向栈顶插入元素被称为进栈、入栈、压栈,从栈顶删除元素又称作出栈所以其按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶......
    • 消息中间件RabbitMQ_RabbitMQ快速入门3
      一、入门程序需求:使用简单模式完成消息传递步骤:1.创建工程(生成者、消费者)2.分别添加依赖3.编写生产者发送消息4.编写消费者接收消息 二、小结上述的入门案例中其实使用的是如下的简单模式:在上图的模型中,有以下概念:P:生产者,也就是要发送消......
    • ETL中如何运用好MQ消息集成
      一、ETL的主要作用ETL(Extract, Transform, Load)是数据仓库中的关键环节,其主要作用是将数据从源系统中抽取出来,经过转换和清洗后加载到数据仓库中。具体而言:Extract(抽取):从不同的数据源(如数据库、文件、API等)中提取数据。Transform(转换):对抽取的数据进行清洗、加工、计算等操作,......
    • 队列的基本操作
      (一)结构体定义一个顺序队列typedefstruct{chardata[maxsize];intrear,front; }sqQueue;(二)队列的初始化头尾两个指针指向0voidInitQueue(sqQueue*s){ (*s).rear=(*s).front=0;}(三)进队操作 注意循环队列的使用intEnQueue(sqQueue*Q,charx)//入队{ ......
    • 数据结构之队列(java语言版)
      队列(Queue):在逻辑上是一种线性存储结构。它有以下几个特点:1、队列中数据是按照"先进先出(FIFO,First-In-First-Out)"方式进出队列的。2、队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。队列通常包括的两种操作:入队列和出队列。队列的种类也很多,单向队列,双向队列,循......
    • 数据结构之队列(c语言版)
      队列(Queue):在逻辑上是一种线性存储结构。它有以下几个特点:1、队列中数据是按照"先进先出(FIFO,First-In-First-Out)"方式进出队列的。2、队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。队列通常包括的两种操作:入队列和出队列。队列的种类也很多,单向队列,双向队列,循......