消息队列 (Message Queue)

news/2024/11/28 4:44:20/

消息队列

What

消息队列

  • 是消息的队列;
  • 是消息的临时缓冲;
  • 是发布/订阅模式的兄弟;
  • 在多个进程/线程间实现异步通讯模式

Why

消息队列在多个进程/线程中实现了异步通讯模式。

这里我们先介绍下同步消息处理。对于同步消息处理,消息的消费者接受消息,处理消息,再接受下一个消息,这会延迟消息的接收直到上一个消息被处理完成,如果消息的处理速度很慢,消息的生产者必须在上一个消息的处理期间等待,直到其完成才能推送下一个消息,这会大大降低消息生产者的效率。

消息队列实现异步消息处理。对于异步消息处理,消息的产生和消息的处理是异步的。消息的生产者将消息暂时放入队列中,然后就可以继续处理其他任务了,而不是阻塞在原地等待消息被处理;消息的消费者会在合适的时间 (比如空闲的时候) 从队列中取出消息进行处理。

消息队列为消息提供缓存,确保消息会被消费者接收。

消息队列还能提供流控制,平衡生产和消费的速度。当消息队列到达高水位 (HWM) 时,不再接收消息进队,并报告给调用方,使其降低消息入队的速率。让消息的消费者能处理队列中的消息,不至于堆积。

When

Where

消息队列常用于进程间通讯或同一进程的线程间通讯。

Who

How

消息队列可能存在隐式或显式的对消息大小的限制以及队列中存在的消息的数量的限制

有些消息队列在多个操作系统和多个应用间传递消息,这样的消息队列一般提供恢复的机制以避免因为程序或系统崩溃导致的消息丢失。

消息传递的准确语义通常有很多选项,包括:

  • 持久性 – 消息可能存储在内存中,写到磁盘中,或者甚至上传到 DBMS 中,如果对可靠性的需求表明需要更多的资源密集型解决方案的话。
  • 安全策略 – 哪个应用应该访问这些消息?
  • 消息清除策略 – 队列或消息可能有“生命周期”。
  • 消息过滤 – 一些系统支持过滤数据,所以订阅者可能仅能看到符合预先指定的感兴趣的标准的消息。
  • 递交策略 – 是否需要保证消息被递交至少一次还是不超过一次。
  • 路由策略 – 在一个有很多队列服务器的系统中,哪个服务器应该接收消息或队列的消息?
  • 批处理策略 – 消息应当被立刻递交嘛?或者系统应该等待一会以尝试一次递交多条消息?
  • 排队标准 – 何时消息被认为是 “已排队的”?当一个队列持有它的时候?或者当它至少被转发到一个远程队列中?或者被转发到所有队列中?
  • 接收通知 – 发布者可能需要知道何时一些或所有的订阅者已经接收到该消息。

http://www.ppmy.cn/news/61840.html

相关文章

第七章集合与字典作业

目录 1.字符串去重排序 2.列表去重 第3关 猜年龄 第4关 集合的属性、方法与运算 第5关 集合介绍 第6关 手机销售统计 第7关 集合添加元素 第8关 列表嵌套字典的排序 第9关 绩点计算 第10关 通讯录(MOD) 第11关 字典增加元素 第12关 字典的属性…

CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度

专题一 CMIP6中的模式比较计划 1.1 GCM介绍 ​ 1.2 相关比较计划介绍 ​ 专题二数据下载 2.1方法一:手动人工 ​ 利用官方网站 2.2方法二:自动 利用Python的命令行工具 ​ 2.3方法三:半自动购物车 利用官方网站 ​ 2.4 裁剪netCDF文件 …

(详解)js中什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?

目录 参考资料 必看强烈建议十分钟看完视频 ,即可学会 必看参考详解宏任务微任务 笔记 宏任务与微任务 定时器的任务编排 promise的微任务处理逻辑 DOM渲染任务 任务队列共享内存 进度条的实现 任务拆分成多个任务 promise复杂任务分割 img算同步还是异步…

Kubernetes 集群中某个节点出现 Error querying BIRD: unable to connect to BIRDv4 socket

1. 问题描述 Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refusedReadiness probe failed: 2023-05-04 22:13:23.706 [INFO]…

带你彻底理解Spark的分区

前言 我:什么是RDD? 面试者:RDD是被分区的,由一系列分区组成… … 我:你怎么理解分区? 面试者:… 我:Spark中有哪些可以实现分区的方法?分别使用的场景是什么? 面试者… 我:Spark默认分区数是多少?如何保证一个分区对应一个文件? 面试者… 我:…谢谢您的面试,回…

【Git】制造冲突以及解决冲突的详细方法

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

干掉Config server的两个节点之后会发生什么?

当前MongoDB集群的测试环境的架构有两个分片,每个分片是三个节点的副本集,一个mongos,mongoDB v4.4.20 config server也是三个节点的副本集(configReplSet),直接停掉两个节点之后,关闭步骤的返…

Unity 后处理(Post-Processing) -- (3)挑战:创建局部后处理Volume

为何使用局部Volume 在前面两节中,我们使用了一个Global Volume来应用后处理,其作用范围是整个场景。有些时候,我们需要实现当角色靠近某个地点后,进行一些特殊的后处理。这时我们就需要使用Local Volume来实现这个功能。 举个例子…