消息队列简介

一、概述

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

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

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

消息队列的主要应用是在不同计算机系统间进行通讯,可以连接多个应用和多种操作系统。有时消息队列增加了一种增强功能,确认在系统失效时不丢失消息。

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

二、用例

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

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

有多种消息处理模块:

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

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

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

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

5、送达策略。至少一次或者其他;

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

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

8、入队条件。什么时候才能称已经入队;

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

三、标准和协议

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

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

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

1、AMQP富特征消息队列;

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

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

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

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

四、同步VS异步

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

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

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

1、一个应用可能需要通讯其他应用一个事件的发生,但不需要等待回应;

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

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

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

时间: 2024-08-21 20:52:39

消息队列简介的相关文章

ActiveMQ消息队列-简介

一.ActiveMQ是什么 ActiveMQ是一个消息中间件(Message-oriented middleware,MOM),实现JMS1.1规范,支持J2EE1.4以上,支持多种语言客户端(java,C,C++,AJAX等等),支持多种协议(http,https,ip多重广播,ssl协议,stomp协议,tcp协议,udp协议等)以及良好的spring支持. 二.ActiveMQ与RPC比较 1.都能实现系统之间解耦: 2.RPC是同步通信,ActiveMQ默认是异步通信,当然它也可支持同步

进程-IPC 共享内存和消息队列 (三)

详见:https://github.com/ZhangzheBJUT/linux/blob/master/IPC(%E4%B8%89).md 五 共享内存 5.1. 共享内存简介 共享内存指多个进程共享同一块物理内存,它只能用于同一台机器上的两个进程之间的通信.在进程的逻辑地址空间中有一段地址范围是用来进行内存映射使用的,该段逻辑地址空间可以映射到共享的物理内存地址上(进程空间介绍:http://blog.csdn.net/zhangzhebjut/article/details/3906025

消息队列概念与认知

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

kafka分布式消息队列介绍以及集群安装

简介 首先简单说下对kafka的理解: 1.kafka是一个分布式的消息缓存系统: 2.kafka集群中的服务器节点都被称作broker 3.kafka的客户端分为:一是producer(消息生产者)负责往消息队列中放入消息:另一类是consumer(消息消费者)负责从消息队列中取消息.客户端和服务器之间的通信采用tcp协议 4.kafka中不同业务系统的消息可以通过topic(主题)进行区分,也就是说一个主题就是一个消息队列,而且每一个消息topic都会被分区,以分担消息读写的负载 5.par

进程间通信——消息队列

1.消息队列的简介 消息队列就是在进程之间架设起通信的通道,信息在通道中传递(具有时间先后的),从宏观逻辑上来讲与管道是一致的.即就是消息队列也同样是:(1).具有入口和出口:(2).消息从入口到出口,是FIFO的:(3).所以消息在其中是队列的存储形式. 消息队列与管道不同的地方在于:管道中的数据并没有分割为一个一个的数据独立单位,在字节流上是连续的.然而,消息队列却将数据分成了一个一个独立的数据单位,每一个数据单位被称为消息体.每一个消息体都是固定大小的存储块儿,在字节流上是不连续的. 2.

PetShop 4.0学习笔记:消息队列MSMQ

直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便利与最好的用户体验. 1.首先在需要进行消息队列的服务器上安装MSMQ,我的系统是win2003+iis6,所以这个安装选项在添加删除程序->windows组件->应用程序服务器内.默认是不安装的,需要手动选择. 2.建立消息队列的存放路径.这可以在windows的计算机管理内添加,也可以在程序中

消息队列 Kafka 的基本知识及 .NET Core 客户端

前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息队列的区别,包括性能及其使用方式. 简介 Kafka 是一个实现了分布式的.具有分区.以及复制的日志的一个服务.它通过一套独特的设计提供了消息系统中间件的功能.它是一种发布订阅功能的消息系统. 一些名词 如果要使用 Kafka ,那么在 Kafka 中有一些名词需要知道,文本不讨论这些名词是否在其他

python之消息队列

引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题.消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. RabbitMQ简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源

去哪儿网可用 消息队列

<去哪儿网技术专场>之 主题一:<去哪儿网可用 高性能 消息队列> 简介: 消息队列一般应用在广播通知.异步操作.数据复制. 为什么我们不用开源的消息队列? 我们开发的消息队列如何实现 “高可用”? 我们开发的消息队列如何实现 “高性能”?