MQ(消息队列)简介

xiaoxiao2021-02-28  38

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

二:AMQP协议介绍 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 AMQP在消息提供者和客户端的行为进行了强制规定,使得不同卖商之间真正实现了互操作能力。

三:JMS协议介绍 JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。 详情请移步至另一篇文章:http://blog.csdn.net/ruben95001/article/details/78363043

四:STOMP协议介绍 STOMP,Streaming Text Orientated Message Protocol,是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。 它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互,类似于OpenWire(一种二进制协议)。其中最流行的STOMP消息代理是Apache ActiveMQ。 博主最初接触到的MQ就是ActiveMQ,当时的业务需求就是,要求用户通过WeChat的微信系统与我司研发的一款APP之间进行相互通信。起初博主当时打算是用第三方的服务,例如环信,但是在熟读其文档后,发现与你用户体系有些不一致。便开始独立研发一套独立的通信系统,基于ActiveMQ。

五:MQ基本概念 1:消息(Message) 消息是MQ中最小的概念,本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体。 2:队列(Queue) 2.1:本地队列 本地队列按照功能可划分为初始化队列,传输队列,目标队列和死信队列。 2.1.1:初始化队列用作消息触发功能。 2.1.2:传输队列只是暂存待传的消息,条件许可的情况下,通过管道将消息传送到其他的队列管理器。 2.1.3:目标队列是消息的目的地,可以长期存放消息。 2.1.4:如果消息不能送达目标队列,也不能再路由出去,则被自动放入死信队列保存。 2.2:别名队列&远程队列 只是一个队列定义,用来指定远端队列管理器的队列。使用了远程队列,程序就不需要知道目标队列的位置。 2.3:模型队列 模型队列定义了一套本地队列的属性结合,一旦打开模型队列,队列管理器会按照这些属性动态地创建出一个本地队列。 3:队列管理器(Queue Manager) 队列管理器是一个负责向应用程序提供消息服务的机构,如果把队列管理器比作数据库,那么队列就是其中一张表。 4:通道(Channel) 通道是两个管理器之间的一种单向点对点的的通信连接,如果需要双向交流,可以建立一对通道。 5:监听器(listner)

六:MQ产品的特性 6.1:可靠性传输 对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责。 6.2:不重复传输 不重复传播也就是断点续传的功能,特别适合网络不稳定的环境,节约网络资源。 6.3:异步性传输 异步性传输是指,接受信息双方不必同时在线,具有脱机能力和安全性。 6.4:消息驱动 接到消息后主动通知消息接收方。 6.5:支持事务 目前MQ也广泛被一些企业用于对于分布式事务的同步。

7:常用的场景 7.1:消息通道 例如博主之前运用的场景就是把MQ作为一种消息通道在APP与微信之间进行一对一或发布/订阅式的通信。其机制入下: 7.2:消息总线机制 在如今的SOA架构活着微服务架构中,这普遍使用,例如上面谈到的事务的同步问题。各个服务之间的通信,可以确保数据的一致性。 机制如下:

八:常见的MQ对比 8.1:RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。 8.2:ActiveMQ 是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。 8.3:Kafka Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理,这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。 8.4:RocketMQ RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性: 1.支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型 2.在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 3.支持拉(pull)和推(push)两种消息模式 4.单一队列百万消息的堆积能力 5.支持多种消息协议,如 JMS、MQTT 等 6.分布式高可用的部署架构,满足至少一次消息传递语义 7.提供 docker 镜像用于隔离测试和云集群部署 详细信息请跳转:http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/

转载请注明原文地址: https://www.6miu.com/read-207042.html

最新回复(0)