MQ消息中间件介绍

首先MQ是什么?

MQ是Message Queue消息队列的缩写。消息队列是一种应用程序对应用程序的通信方法、应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信,队列的使用除去了接收和发送应用程序同时执行的要求。

消息中间件的概况?

消息队列技术是分布式应用间交换信息的一种技术,消息队列可驻留在内存或者磁盘上,队列存储消息直到它们被应用程序读走,通过消息队列,应用程序可独立的执行---它们不需要知道彼此的位置。或者继续执行前不需要等待接收程序接收此消息。


MQ相关的概念:

(1)消息Message

消息是MQ中最小的概念,本质上是一段数据,它能被一个或者多个应用程序所理解。是应用程序之间传递的信息载体、

(2)队列Queue

a、本地队列

本地队列按照功能能划分为初始化队列,传输队列、目标队列、死信队列

    初始化队列:用作消息触发功能。

    传输队列:只是暂存待传的消息,条件许可的情况下,通过管道将消息传送到其他的队列管理器。

   目标队列:是消息的目的地,可以长期存放消息。

    死信队列:当消息不能送到目标队列,也不再路由出去。则自动放入死信队列保存。

b、别名队列和远程队列

只是一个队列的定义,用来指定远程队列管理器的队列、使用了远程队列,程序就不需要知道目标队列的位置、

c、模型队列

模型队列定义了一套本地队列的属性结合。一旦打开模型队列,队列管理器会按照这些属性动态的创建出一个本地队列。

(3)队列管理器(Queue Manager)

队列管理器时一个负责向应用程序提供消息服务的机构,如果把队列管理器比作数据库,那么队列就是其中的一张表、

(4)通道(Channel)

通道是两个管理器之间的一种单向点对点的通信连接,若需要双向交流,可以建立一对通道。

(5)监听器(listener

MQ产品特性

可靠性传输:这个特点是消息中间件的立足之本,对应用来说,只要成功把数据提交个消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责。

不重复传输 :不重复传输也就是断点续传的功能,特别适合在网络不稳定的环境,节约网络资源。

异步传输:接受信息双方不必同时在线,具有脱机能力和安全性。

消息驱动:接到消息后主动通知消息接收方

支持事务:应用程序可以把一些数据更新组合成一个工作单元,这些更新通常是逻辑相关的,为了保障数据完整性,所有的更新必须同时成功或者同时失败。


MQ应用场景:

MQ消息队列是应用松耦合的概念而产生的,主要以队列和发布订阅为消息传输机制,以异步的方式将消息可靠的传输到消息端。它被广泛的应用与跨平台,跨系统的分布式系统之间,为它们提供高效可靠的异步传输机制。

先了解一下发布-订阅消息模式

   有些网站在注册用户成功后发一封激活邮件,用户收到邮件后点击激活链接后才能使用该网站。一般的做法是在注册用户业务逻辑中调用发送邮件的逻辑。这 样用户业务就依赖于邮件业务。如果以后改为短信激活,注册用户业务逻辑就必须修改为调用发送短信的逻辑。如果要注册后给用户加点积分,再加一段逻辑。经过 多次修改,我们发现很简单的注册用户业务已经越来越复杂,越来越难以维护。相信很多开发者都会有类似痛苦的经历。


即使用户业务实现中对其他业务是接口依赖,也避免不了业务变化带来的依赖影响。怎么办?解耦!将注册用户业务逻辑中注册成功后的处理剥离出来。
       再回头看看"订阅杂志",如果没有邮局,出版社就必须自己将杂志送达所有消费者。这种情形就和现在的注册用户业务一样。我们发现问题了,在用户业务和其他业务之间缺少了邮局所扮角色。
       我们把邮局抽象成一个管理消息的地方,叫"消息管理器"。注册用户成功后发送一个消息给消息管理器,由消息管理器转发该消息给需要处理的业务。现在,用户业务只依赖于消息管理器了,它再也不会为了注册用户成功后的其他处理而烦恼。




注册用户的改造就是借鉴了"订阅杂志"这样原始的模式。我们再进一步抽象,用户业务就是消息的"生产者",它将消息发布到消息管理器。邮件业务就是 消息的"消费者",它将收到的消息进行处理。邮局可以订阅很多种杂志,杂志都是通过某种编号来区分;消息管理器也可以管理多种消息,每种消息都会有一个 "主题"来区分,消费者都是通过主题来订阅的。



消息通道(MessageChannel)使用MQ将彼此协作的客户端和服务端连接起来,使它们可以交换消息。


若客户端和服务端需要安全可靠的交互,可以将一个MQ队列作为安全通道,是客户端与服务端能够安全高效的进行

异步通讯。

消息总线(Message Bus)

对于许多独立开发的服务组成的分布式系统,若要将他们组成一个完整的系统,这些服务必须能够可靠的交互,同时,为了系统的健壮性,每个服务之间又不能过分紧密的依赖,这样就可以通过消息总线将不同的服务连接起来,允许它们异步的传递数据。



消息路由:通过消息路由,可以将发送到MQ指定队列的消息根据规则路由到不同的队列。

猜你喜欢

转载自blog.csdn.net/bingguang1993/article/details/80936457