我对消息中间件的理解

什么是Message Queue?

提到消息中间件,那么首先就必须理解一下所谓的Message Queue。

在平常的开发中,应用开发人员完全可以通过发送和接受消息的方式来方便的与应用程序进行可靠的通信,并且消息的处理为我们提供了方便的消息传递和许多业务处理的可靠的防止故障的方法。

但消息传递与传统的应用程序交互又有区别?最明显的区别就是实时性了。Message Queue不适合实时性要求比较高的场景,因为Message Queue通过异步的方式与server端进行交互,不用担心server端的长时间处理过程。

举个例子,平常的应用程序之间的调用大部分都是通过暴漏接口的形式进行相互的调用,一旦业务复杂起来,接口之间的管理也会很麻烦。这时候如果通过Message Queue的方法的话,只要在需要的时候把消息发送到Queue Manage就可以,这时候Message Queue就成了嫁接各个系统之间的桥梁。

上面也提到了实时性的问题,比如一个生成报表的功能,为了给用户更好的体验度,我们不可能让用户等待很长的时间,这时可以把对报表的处理使用MQ,客户端只需要把必要的报表请求和一些必要的报表条件放置到Queue中处理,处理好后,再给用户发送一个消息即可。

下面也简单的介绍几个专业的术语?

消息:两台计算机之间传送的数据单位,例如字符串、文本等

消息队列:消息的容器,用于在消息传递的过程中保存消息的容器,充当消息源和目标之间的中间桥梁。队列的只要目的就在于提供路由保证消息的传递。

消息队列网络:是指能够相互之间发送消息的一组计算机。网络中不同的计算机在消息处理过程中扮演者不同的角色,有的是发送者,有的是接受者。

消息中间件简介?

上面对消息队列有了一定的了解,那么消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以再分布式环境下扩展进程间的通信。

那么对于消息中间件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)、Broker(中转角色),有这么几个主要的角色,那么消息中间件能为我们带来那些功能呢?

1.Message Priority

Producer把消息发送给Broker来存储,那么我们就可以再消息队列中对我们的消息来进行排序,实现不同的优先级。从而满足我们复杂的业务需求。

2.Message Order

消息排序,有的消息的处理是需要按照一定的顺序进行处理的,比如用户的创建订单、订单付款、订单完成。那么对于消费者也需要按照这个流程来消费,否则就没有意义了。

3.Message Filter


在消息对立中,也可以对我们的消息进行过滤,比如按照消息类型等条件来过滤

4.Message Persistence


消息的持久化,一般有以下几种方式

(1)持久化到数据库,比如mysql

(2)持久哈到KV存储,比如redis

(3)文件形式持久化

消息的持久化,防止了系统挂掉后,仍然能够从之前备份中恢复出来。

5.Broker的Buffer满了怎么办?


我们知道Broker是用来存储需要处理的消息,如果消息过多,导致Buffer满了怎么办?

这时候就会采取一定的策略来丢弃已有的消息。

6.事务的支持


正如上面所谈到的订单的操作,因此消息中间件中也会提供对分布式事务的支持。

7.定时消息


在实际应用中,有时也会需要定时消费的功能,因此中间件中,也会对消息进行排序,然后实现定时发送或者消费消息的业务需求。

8.消息重试

考虑一下这个问题,如果消息消费失败后,怎么办,是等待处理这个消息呢?还是让消费者在此消费一次呢?通常情况下,采取后者的形式,因为大多数情况下,消费失败的原因在于该消息本身的原因,如果在此消费这个消息的话,还是会出现失败的情况,因此通常采取在此发送消息在此消费消息的方式。

9.回溯消费

什么是回溯消费呢?对于已经消费成功的消息,是不是在Broker中就丢弃该消息呢?显而易见是不可能的,因此需要中间件对该功能支持,支持已经消费的信息进行时间段内的存储,等待某一刻内该消息会被重新消费的可能。

时间: 2024-10-13 02:37:39

我对消息中间件的理解的相关文章

高级系统架构师培训笔记

前几天参加了中科院计算所培训中心谢老师的高级系统架构师培训课程,将其中的一些点做了下记录: 系统架构师的工作是复杂设计总体解决方案以及领域对象的逻辑和物理布局,这是一项在复杂环境中高风险.高影响力的活动. 1.软件架构的定义:软件架构(Software Architecture)也称之为软件体系结构,它是一组有关如下要素的重要决策:软件系统的组织,构成系统的结构化元素,接口和它们相互协作的行为的选择,结构化元素和行为元素组合成粒度更大的子系统方式的选择,以及指导这一组织(元素及其接口.协作和组合

如何深入理解一套MQ消息中间件

怎样算是理解了一套MQ中间件呢?原来一知半解的我列了几个维度:demo跑起来,理解其投递次数的语义,理解其事务的特性等等.这是一种角度,但总有种看山不是山的一知半解的感觉.再问一层,比如为什么Kafka吞吐量远胜于其他中间件,为什么说适合日志采集和流式计算的场景?就回答不上来了.学习终归是个积累的过程. 直到某一天看到阿里一篇挺常规的关于Notify和MetaQ的介绍,却突然茅塞顿开.当然了,其中不乏是做了一两个需求的缘故.故事是围绕着一下几个疑问展开的. 1.什么是消息中间件,解决了什么问题?

消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由键路由至指定的队列. 黄色框:交换机和队列通过路由键有一个绑定的关系. 绿色框:消费端通过监听队列来接收消息. 2. 交换机属性 Name:交换机名称 Type:交换机类型--direct.topic.fanout.headers.sharding(此篇不讲) Durability:是否需要持久化,

架构设计:系统间通信(32)——其他消息中间件及场景应用(下2)

(接上文<架构设计:系统间通信(31)--其他消息中间件及场景应用(下1)>) 5-3.解决方案二:改进半侵入式方案 5-3-1.解决方法一的问题所在 方案一并不是最好的半侵入式方案,却容易理解架构师的设计意图:至少做到业务级隔离.方案一最大的优点在于日志采集逻辑和业务处理逻辑彼此隔离,当业务逻辑发生变化的时候,并不会影响日志采集逻辑. 但是我们能为方案一列举的问题却可以远远多于方案一的优点: 需要为不同开发语言分别提供客户端API包.上文中我们介绍的示例使用JAVA语言,于是 事件/日志采集

什么是分布式消息中间件?

什么是分布式消息中间件? 什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件. 分布式系统 "A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges."--<Distributed Syst

My way to Python - Day012 - 消息中间件

消息中间件介绍 消息中间件的概念 消息中间件是在消息传输过程中保存消息的容器.消息中间件在将消息从它的源中继到它的目标时充当中间人的作用.队列的主要作用是提供路由并保证消息的传递:如果发生消息接收者不可用,消息队列会保留消息,直到可以成功传递它为止,当然,消息队列保存消息也是有期限的. 类比理解记忆 使用生产者.消费者的关系进行类比 消息生产者 → 消息中间件 → 消息消费者 ※ 消息是有时效性的,存在过期→消息租约的概念 消息中间件特点 1,采用异步处理模式 消息发送者可以发送一个消息而无须等

消息中间件与JMS标准

初识消息中间件 维基百科上对于消息中间件的定义是"Message-oriented middleware(MOM) is software infrastructure focused on sending and receiving messages between distrubuted systems".解释起来就是消息中间件是在分布式系统中完成消息的发送和传递的基础软件.看张图来更直观地理解消息中间件: 看到消息中间件有两个好处: 1.异步 2.解耦 应用A和应用B都和消息中间

消息中间件的集群技术

美白针 美白针价格 http://www.shzhenai.com/Activity/201103/MeiBaiZhen/ 消息中间件( Message Oriented Middleware ) 是一类特定的中间件, 它利用高效可靠的消息传递机制进行平台无关的数据交流, 并基 于数据通信来进行分布式系统的集成. 通过提供消息传递和消息排队模型, 它可在分布环境 下扩展进程间的通信,并支持多通信协议.语言.应用程序.硬件和软件平台.目前流行的 MOM 中间件产品有 IBM 的 MQSeries

消息中间件的意义和应用场景 (activeMq)

消息中间件一般两个功能,解耦和异步处理,分别举个例子吧 解耦合:比如我们做一个微博产品中的好友系统,就很需要使用消息中间件当我们添加一个关注的时候, 涉及以下几个子系统 推荐系统,需要根据你关注的人给你做数据分析搜索系统,需要根据你的数据建立索引feed系统,需要根据你关注的人,发送一条新鲜事统计系统 用于数据统计,了解产品情况 而如果直接在加关注的流程里进行这些操作,可能带来风险,所以,会引入mq来解耦合,因此就像你说的,一般是 "单向传输" 的(当然这不是绝对的,取决于你系统复杂度