消息中间件:简述消息队列(MessageQueue)


消息队列(MessageQueue)是服务架构中常见的组件,可用于服务间解耦、事件广播、任务异步/延迟处理等,常用于分布式系统之间互相信息的传递。接下来对消息队列的实现如何满足几种消费场景进行简单阐述。

一 . 消息队列相关概念

1、生产者(Producer):负责产生消息;

2、消费者(Consumer):负责消费消息;

3、消息(Message):在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象;

4、消息队列(Message Queue):一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。

5、消息代理(Message Broker):负责存储/转发消息,转发分为推和拉两种。
      拉是指Consumer主动从Message Broker获取消息;
      推是指Message Broker主动将Consumer感兴趣的消息推送给Consumer。

二 . 消息队列的消费场景

1、消息至多被消费一次

该场景是最容易满足的,特点是整个消息队列吞吐量大,实现简单。适合能容忍丢消息,消息重复消费的任务。

a)Producer发送消息到Message Broker阶段:
Producer发消息给Message Broker,不要求Message Broker对接收到的消息响应确认,Producer也不用关心Message Broker是否收到消息了。
      b)Message Broker存储/转发阶段:
对Message Broker的存储不要求持久性,转发消息时也不用关心Consumer是否真的收到了。
      c)Consumer消费阶段:
Consumer从Message Broker中获取到消息后,可以从Message Broker删除消息,或Message Broker在消息被Consumer拿去消费时删除消息,不用关心Consumer最后对消息的处理结果。

2、消息至少被消费一次

适合不能容忍丢消息,但允许重复消费的任务。

      a)Producer发送消息到Message Broker阶段:
Producer发消息给Message Broker,Message Broker必须响应对消息的确认。
      b)Message Broker存储/转发阶段:
Message Broker必须提供持久性保障,转发消息时,Message Broker需要Consumer通知删除消息,才能将消息删除。
      c)Consumer消费阶段:
Consumer从Message Broker中获取到消息,必须在消费完成后,Message Broker上的消息才能被删除。

3、消息仅被消费一次

适合对消息消费情况要求非常高的任务,实现较为复杂,这里的“仅被消费一次”包含如下两种场景:

1)Message Broker上存储的消息被Consumer仅消费一次,场景要求:

      a)Producer发送消息到Message Broker阶段:
Producer发消息给Message Broker,不要求Message Broker对接收到的消息响应确认,Producer也不用关心Message Broker是否收到消息了。
      a)Message Broker存储/转发阶段:
Message Broker必须提供持久性保障,并且每条消息在其消费队列里有唯一标识(这个唯一标识可以由Producer产生,也可以由Message Broker产生)。
      a)Consumer消费阶段:
Consumer从Message Broker中获取到消息后,需要记录下消费的消息标识,以便在后续消费中防止对某个消息重复消费。比如Consumer获取到消息,消费完后,还没来得及从Message Broker删除消息,就挂了,这样Message Broker如果把消息重新加入待消费队列的话,那么这条消息就会被重复消费了。

2)Producer上产生的消息被Consumer仅消费一次,场景要求:

      a)Producer发送消息到Message Broker阶段:
Producer发消息给Message Broker,Message Broker必须响应对消息的确认,并且Producer负责为该消息产生唯一标识,以防止Consumer重复消费(因为Producer发消息给Message Broker后,由于网络问题没收到Message Broker的响应,可能会重发消息给到Message Broker)。
      b)Message Broker存储/转发阶段:
Message Broker必须提供持久性保障,并且每条消息在其消费队列里有唯一标识(这个唯一标识需要由Producer产生)。
      c)Consumer消费阶段:
Consumer从Message Broker中获取到消息后,需要记录下消费的消息标识,以便在后续消费中防止对某个消息重复消费。比如Consumer获取到消息,消费完后,还没来得及从Message Broker删除消息,就挂了,这样Message Broker如果把消息重新加入待消费队列的话,那么这条消息就会被重复消费了。

参考:https://mp.weixin.qq.com/s/g5Qq_gasJbDFVfOYkZaPcg

消息中间件:简述消息队列(MessageQueue)相关推荐

  1. 【Android 异步操作】手写 Handler ( 循环者 Looper | Looper 初始化 | Looper 遍历消息队列 MessageQueue )

    文章目录 一.Looper 初始化 二.Looper 遍历消息队列 MessageQueue 三.完整 Looper 代码 一.Looper 初始化 Looper 是 线程本地变量 , 在每个线程中 ...

  2. 【Android 异步操作】手写 Handler ( 消息队列 MessageQueue | 消息保存到链表 | 从链表中获取消息 )

    文章目录 一.MessageQueue 消息队列存储消息 二.MessageQueue 消息队列取出消息 三.消息队列完整代码 一.MessageQueue 消息队列存储消息 Message 链表 : ...

  3. 【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )

    文章目录 一.Message 消息 二.ThreadLocal 线程本地变量 三.Looper 中的消息队列 MessageQueue 一.Message 消息 模仿 Android 中的 Messa ...

  4. python 消息中间件_消息队列中间件 RabbitMQ 详细介绍——安装与基本应用(Python)...

    RabbitMQ 是当前最流行的消息中间件(Message Broker)之一,支持多种消息协议(如 AMQP.MQTT). 同时它也是一个轻量级的非常易于部署的开源软件,可以运行在当前大多数操作系统 ...

  5. 从没有人能把MOM异步通信,消息中间件,消息队列?给一次性讲清

    MOM异步通信 在微服务架构中,使用REST和RPC的方式最大的问题就是请求/响应模式的通信模式可能导致服务之间调用的可用性降低,客户端与服务端需要同时在线,双方都需要知道对方的URL地址,或者服务消 ...

  6. 【Android 异步操作】Handler 机制 ( MessageQueue 消息队列的阻塞机制 | Java 层机制 | native 层阻塞机制 | native 层解除阻塞机制 )

    文章目录 一.MessageQueue 的 Java 层机制 二.MessageQueue 的 native 层阻塞机制 三.MessageQueue 的 native 层解除阻塞机制 三.Messa ...

  7. 【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )

    文章目录 一.Handler 构造函数 二.Handler 消息分发 三.MessageQueue 消息队列相关函数 一.Handler 构造函数 一般使用 Handler 时 , 调用 Handle ...

  8. weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...

    什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...

  9. android自定义队列,Android 消息机制(一)消息队列的创建与循环的开始 Looper与MessageQueue...

    写在前面 本文基于Android 7.1.1 (API 25)的源码分析编写 与之前的触摸事件分发机制分析的文章一样,Android系统机制的分析中关键的一环就是事件消息的处理.之前也说过,Andro ...

  10. 消息队列及常见消息中间件

    可以直接去看原文:浅谈消息队列及常见的消息中间件 简介 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段.它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多的 ...

最新文章

  1. ASP.NET-Cookies的用法
  2. verilog 浮点转定点_浮点数0.1+0.2为何不等于0.3
  3. 使用Java将数据流式传输到HPCC
  4. 进程之间的通信方式-共享内存
  5. php下拉列表 二级 联动,PHP+Ajax实现二级联动下拉菜单!
  6. Educational Codeforces Round 30 A[水题/数组排序]
  7. php warning: array_merge(),php数组合并array_merge()函数使用注意事项_php技巧
  8. 强悍的 Linux —— 文件解压与解压
  9. Harmony OS — Checkbox多选框
  10. 应用系统适配迁移方案
  11. office 2010 系列问题
  12. C语言从入门到不放弃---编程环境的搭建到上手写代码
  13. 计算机程序班搞笑口号,集搞笑自创的运动会口号?
  14. 1.42 财务测量指标——静态评价法(投资回报率+投资回收期)
  15. 【电脑使用】桌面图标有蓝底怎么去掉
  16. 智能卡 PSAM 卡片文件结构
  17. 如何保养笔记本的电池
  18. win10系统无法访问指定设备或路径怎么解决?
  19. 有关颜色敏感度测试的软件是啥,测试你对颜色的敏感度,最后一题能答对算你厉害!...
  20. 信息安全-网络安全的三大支柱和攻击向量

热门文章

  1. 白盒测试 | 用例设计方法之条件组合覆盖
  2. 菲尼克斯FL SWITCH SFN 16TX多端口交换机
  3. Windows7 445端口漏洞
  4. android刷机教程基础篇
  5. python爬虫基础教程115_python爬虫分析:115网盘的模拟登录
  6. 金山文字和Word中的格式刷更顺手(转)
  7. 《软件开发》串口调试助手
  8. EXCEL VBA批量下载URL链接地址图片、URL链接地址图片转为图片
  9. 高等数学复习笔记——第八章:向量代数与空间解析几何
  10. Java的LocalDateTime与mysq的datatime数据类型匹配不了