消息队列学习一 概念

消息中间件随着分布式系统的发展变得越来越火,下面就学习课程过程对消息中间件进行解释

概念:(部分内容引用自:享学课堂课件)

  其实并没有标准定义。一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布 式系统中的其余各个子系统进行集成。

  高效:对于消息的处理处理速度快。

  可靠:一般消息中间件都会有消息持久化机制和其他的机制确保消息不丢失。

  异步:指发送完一个请求,不需要等待返回,随时可以再发送下一个请求,既不需要等待。

  一句话总结,我们消息中间件不生产消息,只是消息的搬运工

为什么要用消息中间件?

  最初系统设计都是一个整体,业务相对简单,一个war 就可以部署使用,不涉及系统之间通信问题,

  但是随着计算机技术的发展, 系统数据量越来越大,业务越来越复杂,一个系统就变得越来越臃肿,难以维护,所以出现了分布式概念,将一个大系统根据业务模块

  拆分成多个子系统,每个子系统分别负责不同的业务职能,这时就出现了系统与系统之间的数据频繁交互情况,RPC 就是用来做系统间数据交互,但是由于系统之间直接数据交互依赖性太强,一个子系统出现问题,

  它对应的数据交互就会出现问题进而整个系统的出现问题,而且随着系统的不断拓展,子系统越来越多,不同系统之间数据进行交互,越来越混乱,难以管理和维护

  所以提出了消息中间件的概念:

  无论多少子系统,消息中间件根据与自己的交互情况分成两部分,消息生产者和消息消费者

  消息生产者:系统向中间件发送数据,此时系统为生产者

  消息消费者:系统向中间件请求数据,此时系统为消费者

  当然同一个系统同时存在请求数据和发送数据的情况,那他即时生产者还是消费者(不同的业务场景下角色不一样罢了)

消息中间件出现解决的问题:

1、统一对系统间数据交换进行管理,使得系统间的逻辑层次划分家清晰明了

2、通过消息中间件中进行数据分析统计更加方便

3、解耦合,系统之间通过媒介(消息中间件)间接通信,降低了系统之间的相互依赖

4、异步通信,系统之间交互无需等待对方的回复,只要将消息成功发送到中间件即可(可独立的进行自己的业务,降低系统间依赖)

5、缓冲能力,消息中间件像是一个巨大的蓄水池,将高峰期大量的请求存储下来慢慢交给后台进行处理,避免了大数据量的系统交互出现的系统崩溃问题,对于秒杀业务来说尤为重要。

6、缓冲能力 伸缩性 伸 缩 性 , 是 指 通 过 不 断 向 集 群 中 加 入 服 务 器 的 手 段 来 缓 解 不 断 上 升 的 用 户 并 发 访 问 压 力 和 不 断 增 长 的 数 据 存 储 需 求 。 就 像 弹 簧 一 样 挂 东 西 一 样 , 用 户 多 , 伸 一 点 , 用 户 少 , 浅 一 点 , 啊 , 不 对 , 缩 一 点 。 是 伸 缩 , 不 是 深 浅 。 衡 量 架 构 是 否 高 伸 缩 性 的 主 要 标 准 就 是 是 否 可 用 多 台 服 务 器 构 建 集 群 , 是 否 容 易 向 集 群 中 添 加 新 的 服 务 器 。 加 入 新 的 服 务 器 后 是 否 可 以 提 供 和 原 来 服 务 器 无 差 别 的 服 务 。 集 群 中 可 容 纳 的 总 的 服 务 器 数 量 是 否 有 限 制 。

7、扩展性 扩 展 性 , 主 要 标 准 就 是 在 网 站 增 加 新 的 业 务 产 品 时 , 是 否 可 以 实 现 对 现 有 产 品 透 明 无 影 响 , 不 需 要 任 何 改 动 或 者 很 少 改 动 既 有 业 务 功 能 就 可 以 上 线 新 产 品 。 比 如 用 户 购 买 电 影 票 的 应 用 , 现 在 我 们 要 增 加 一 个 功 能 , 用 户 买 了 铁 血 战 士 的 票 后 , 随 机 抽 取 用 户 送 异 形 的 限 量 周 边 。 怎 么 做 到 不 改 动 用 户 购 票 功 能 的 基 础 上 增 加 这 个 功 能 。 熟 悉 设 计 模 式 的 同 学 , 应 该 很 眼 熟 , 这 是 设 计 模 式 中 的 开 闭 原 则 ( 对 扩 展 开 放 , 对 修 改 关 闭 ) 在 架 构 层 面 的 一 个 原 则

消息中间件和RPC(远程系统调用)区别——RPC 就是实现了子系统之间的直接数据交互

1、RPC  同步的,消息中间件是异步的

2、RPC 系统间依懒性太强,消息中间件系统间依赖性较低

未待完续。。。。。。

原文地址:https://www.cnblogs.com/yutf/p/11544512.html

时间: 2024-07-30 13:25:34

消息队列学习一 概念的相关文章

消息队列学习(待续)

概念 系统 消息队列功能及应用场景 异步处理 解耦 紧耦合 概念 随着需求的叠加,各模块之间逐渐变成了相互调用的关系 问题 对一个模块的功能变更,将导致其关联模块发生变化,模块之间难以独立 解决方法 模块之间调用时增加一个中间层 一个模块只关心自己的核心流程,而依赖该模块执行结果的其他模块,如果做的不是很重要的事情,有 通知 即可,无须等待结果 方便扩展 流量削峰 日志收集 事务最终一致性 参考 <分布式消息中间件实践> 原文地址:https://www.cnblogs.com/wangzhi

rabbitmq消息队列学习——&quot;工作队列&quot;

二."工作队列" 在第一节中我们发送接收消息直接从队列中进行.这节中我们会创建一个工作队列来分发处理多个工作者中的耗时性任务. 工作队列主要是为了避免进行一些必须同步等待的资源密集型的任务.实际上我们将这些任务时序话稍后分发完成.我们将某个任务封装成消息然后发送至队列,后台运行的工作进程将这些消息取出然后执行这些任务.当你运行多个工作进程的时候,这些任务也会在它们之间共享. 前期准备 上一节的练习中我们发送的是简单包含"Hello World!"的消息,这节我们还发

Windows消息队列学习笔记

1.windows消息和消息结构 一条消息是作为一个结构传递给应用程序的,这个结构中,包含了消息号,消息的类型,字参数和长字参数等信息.结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; 第一个成员变量hwnd表示消息所属的窗口.在Windows程序中,用HWND类型的变量来标识窗口. 第二个成员变量message指定

MQ(消息队列)学习

转自: http://book.51cto.com/art/201502/466288.htm         为什么我们需要MQ? 而这就是MQ :一个高效的可嵌入库,它解决了大部分应用程序需要解决的问题,变得在网络上有良好的可伸缩性,而没有多少成本. 具体做法是: 它在后台线程异步处理I/O.这些线程使用无锁数据结构与应用程序线程进行通信,所以并发MQ 应用程序不再需要锁.信号量,或其他等待状态. 组件可以动态地来去自如,而MQ 会自动重新连接.这意味着你可以以任何顺序启动组件.你可以创建“

并发无锁队列学习(概念介绍)

1.前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中.队列典型的特征是先进先出(FIFO),符合流水线业务流程.在进程间通信.网络通信之间经常采用队列做缓存,缓解数据处理压力.结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现.根据操作队列的场景分为:单生产者--单消费者.多生产者--单消费者.单生产者--多消费者.多生产者--多消费者四大模型.其实后面三种的队列,可以归纳为一种多对多.根据队列中数据分为:队列中的数据是定长的.队列中的数据是变长的. 2.队列操作模型 (

消息队列概念与认知

本文是-消息队列学习的概念与介绍篇.目的是能够对消息队列能够有一个简单的了解和大体的认知. 参考/学习资料整理(好东西要学会分享 ) B站上的黑马ActiveMQ的视频教程 Hollis公众号上的消息队列文章 架构之家公众号上的消息队列文章 JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目) CS-Notes(技术面试必备基础知识) JCSprout(处于萌芽阶段的 Java 核心知识库) 一个在线绘图的工具 一.消息队列简介 消息队列 MQ(message qu

WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ

之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识(1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的基础文章.在那篇文章里,我们详细介绍了MSMQ消息队列的基本概念.安装.部署.开发.调试等相关问题.今天我们来学习WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ.在WCF框架下使用MSMQ消息队列服务编程.  这里我会给出一个使用WCF MSMQ实现离线请求的DEMO示例程序. 全文结构是:[1]MSMQ基本概念[2]W

新手也能看懂,消息队列其实很简单

消息队列其实很简单 “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词.我也在我的多篇文章中提到了这个概念.可能你是熟练使用消息队列的老手,又或者你是不懂消息队列的新手,不论你了不了解消息队列,本文都将带你搞懂消息队列的一些基本理论.如果你是老手,你可能从本文学到你之前不曾注意的一些关于消息队列的重要概念,如果你是新手,相信本文将是你打开消息队列大门的一板砖. 一 什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当

Linux:进程通信之消息队列Message实例

/*send.c*/ /*send.c*/ #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <errno.h> #define MSGKEY 1024 struct msgstru { long msgtype; char msgtext[2048]; }; main() { struct msgstru ms