当前位置: 首页 > news >正文

消息队列 (Message Queue)

消息队列

What

消息队列

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

Why

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

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

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

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

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

When

Where

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

Who

How

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

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

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

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

相关文章:

  • JavaScript原型链污染学习记录
  • 顶级白帽黑客必备的十大黑客技术
  • 【关于认证鉴权一些概念梳理】
  • 16.网络爬虫—字体反爬(实战演示)
  • BOM概述
  • 3.Docker实用技术
  • 群体无人机:协同作战的未来
  • 如何在Windows AD域中驻留ACL后门
  • LVGL移植——stm32f4
  • ASEMI代理ADP5054ACPZ-R7原装ADI车规级ADP5054ACPZ-R7
  • TCP/IP相关面试题
  • MySQL数据库——MySQL存储过程是什么?
  • 消息队列中的事务消息
  • 03. 路由参数.重定向.视图
  • Flowable入门
  • Scala Option类型,异常处理,IO,高阶函数
  • unity进阶学习笔记:单例模式
  • 软件测试——性能指标
  • leetcode 405. 数字转换为十六进制数
  • 部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...
  • 使用篇丨链路追踪(Tracing)很简单:链路拓扑
  • 2023年厦门等保二级备案办理流程
  • 提高开发效率,从这些小技巧开始——5个让你爱上IDEA的增加体验小技巧
  • Python基础合集 练习22 (错误与异常处理语句2)
  • ELK -- kibana 用nginx代理后无法访问
  • 什么是分布式事务
  • 在 Python 中将整数转换为罗马数字
  • HashTable,Properties,TreeSet源码分析
  • 多维图像去噪方法研究
  • 托福口语考察内容和形式