消息队列简介

 

 

1、概述

计算机科学中,消息队列和邮箱是用于进程间或者线程与同一进行间通信的软件工程组件。他们都是消息传传输控制队列。数据库

消息队列是发布/订阅模型的变种,是较大的面向消息的中间件的一部分。多数消息系统支持发布/订阅和消息队列模型的API,如JMS(Java Message Service)。编程

消息队列提供异步的通信协议,这就意味着消息发送者和消息接收者不须要在同一时间与消息队列交互。消息入队直到接收者来读取。消息队列都有单条消息大小的限制,入队消息的数目也有限制。安全

消息队列的主要应用是在不一样计算机系统间进行通信,能够链接多个应用和多种操做系统。有时消息队列增长了一种加强功能,确认在系统失效时不丢失消息。异步

多数实时操做系统,如VxWorks和QNX,鼓励使用消息队列做进行间或者线程间主要的通信机制。Erlang语言使用进程,提供一样的功能。这些进程使用消息队列进行异步通信。编程语言

2、用例

在一个典型的消息队列应用场景中,系统管理员安装和配置消息队列软件,并命名消息队列或者注册消息服务。应用程序的进程注册并监听消息。接下的应用链接到队列,并在此之上传送消息。操作系统

消息队列管理软件保存消息直到接收程序链接到队列。接收程序接收并处理消息。线程

有多种消息处理模块:中间件

一、持久存储。消息保存在内容,并写到磁盘中,甚至写入数据库;队列

二、安全策略。控制哪一个程序才能访问队列;进程

三、消息存活策略。队列和消息存在一个有效期;

四、消息过滤。支持消息路由,只接收选择的数据;

五、送达策略。至少一次或者其余;

六、路由策略。在多服务系统,那个服务应该接收到消息;

七、批处理策略。消息是当即投递或者稍等一会一块投递;

八、入队条件。何时才能称已经入队;

九、接收通知。消息发布者可能须要消息订阅是否已经接收到消息。

3、标准和协议

历史上,消息队列曾用私有的、封闭的协议,这就限制了不一样操做系统或者不一样编程语言在一个异构的环境中进行通信。

早期通用化尝试为SUN公司的JMS,他只提供Java语言API的客户端。这就给Java开发人员提供了一种类型数据库开发人员使用的SQL语言。在实际应用中,考虑到消息队列的差别及应用场景的不一样,很难作到通用。

在开源消息队列的实现过程当中,逐渐造成了3种标准:

一、AMQP富特征消息队列;

二、STOMP,简单的面向文件的消息队列;

三、MQTT,轻量级的消息队列。

这些协议标准程序和接收程序不一样。AMQP和STOMP和HTTP位于同一层。MQTT与TCP处于同一层。

一些私有化实现,也采用HTTP来提供消息队列,如Amazon的SQS。由于总存在一种使用基于请求应答机制实现经过异步协议增长异步功能的可能性。

4、同步VS异步

多数普遍使用的通信协议,操做是同步,如应用于万维网和Web服务中的HTTP协议。HTTP的典型场景是:客户端发送一个请求,接着等待回应。

可是与存在一些场景同步操做并不适合。例如AJAX(Asynchronos JavaScript ans XML)用于异步传送文件、JSON和XML消息,以此来更新部分网页。Google用AJAX技术实现了Google Suggest,用于传送部分已经匹配客户查询信息列表,这个列表异步更新。

其余异步用例存在于事件通知系统和发部/订阅系统中:

一、一个应用可能须要通信其余应用一个事件的发生,但不须要等待回应;

二、在发部/订阅系统中,一个应用发部信息给多个客户端去读。

上述两个例都没有必要等待响应,就算一个接收宕掉。

应用不须要只异步或者同步。一个应用能够部分功能使用异步方式,部分功能使用同步方式。

相关文章
相关标签/搜索