mag-edu

消息队列是分布式应用间交换信息的重要组件,消息队列可驻留在内存或磁盘上, 队列可以存储消息直到它们被应用程序读走。

通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息。

所以消息队列可以解决应用解耦、异步消息、流量削锋等问题,是实现高性能、高可用、可伸缩和最终一致性架构中不可以或缺的一环。

现在比较常见的消息队列产品主要有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、RocketMQ等。今天为大家介绍一下每个消息队列及各自特点,并为大家准备了一套学习资料,感兴趣的就读下去吧~

ps:全部学习资料已打包,戳这领取!

 

 

 

1、ActiveMQ

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

 

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

ActiveMQ特性如下:

  • 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  • 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  • 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  • 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  • 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  • 支持通过JDBC和journal提供高速的消息持久化
  • 从设计上保证了高性能的集群,客户端-服务器,点对点
  • 支持Ajax
  • 支持与Axis的整合
  • 可以很容易得调用内嵌JMS provider,进行测试

教程分享:《ActiveMQ使用手册》

pdf来源网络,侵删

最新使用文档请移步至官网:
https://activemq.apache.org/

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

本文档第二部分介绍了 ActiveMQ 的原理和重要配置介绍,第三部门介绍群集搭建方式 , 分析各种集群方式的优缺点 ,第四部分实战搭建Master-Slave+Broker-Custer 的群集,第五部分是对 ActiveMQ 的监控,可以通过JMX 接口直接获取当前的消息情况,第六部分是对 ActiveMQ 使用要注意的情况。对于清楚 JMS 和 ActiveMQ 熟悉的,需要对 ActiveMQ 做集群处理,可以跳过第二、三章直接看第四章实践。

2、RabbitMQ

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。


几个重要概念:

  • Broker:简单来说就是消息队列服务器实体。
  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  • vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  • producer:消息生产者,就是投递消息的程序。
  • consumer:消息消费者,就是接受消息的程序。
  • channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

教程分享:《RabbitMQ中文文档》

pdf来源网络,侵删

最新使用文档请移步至官网:https://www.rabbitmq.com

入门教程分为6大部分,对纯小白来说有一定参考意义

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

3、ZeroMQ

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

号称史上最快的消息队列,它实际类似于Socket的一系列接口,他跟Socket的区别是:普通的socket是端到端的(1:1的关系),而ZMQ却是可以N:M 的关系,人们对BSD套接字的了解较多的是点对点的连接,点对点连接需要显式地建立连接、销毁连接、选择协议(TCP/UDP)和处理错误等,而ZMQ屏蔽了这些细节,让你的网络编程更为简单。ZMQ用于node与node间的通信,node可以是主机或者是进程。

引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。”

特点是:

  • 高性能,非持久化
  • 跨平台:支持Linux、Windows、OS X等
  • 多语言支持; C、C++、Java、.NET、Python等30多种开发语言
  • 可单独部署或集成到应用中使用
  • 可作为Socket通信库使用

教程分享:《ZeroMQ官方文档中文版》

pdf来源网络,侵删

最新使用文档请移步至官网:https://zeromq.org/

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

本篇文档共300+页,五大章内容:

第一章 ZeroMQ 基础

第二章 ZeroMQ 进阶

第三章 高级请求-应答模式

第四章 可靠的请求-应答模式

第五章 高级发布-订阅模式

4、Kafka

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:

  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。(文件追加的方式写入数据,过期的数据定期删除)
  • 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息
  • 支持通过Kafka服务器和消费机集群来分区消息
  • 支持Hadoop并行数据加载

教程分享:《Kafka官方中文文档》

pdf来源网络,侵删

最新使用文档请移步至官网:http://kafka.apache.org/

Kafka官方中文文档既适合小白入门也适合有一定基础的同学进阶提升。这份文档共分为9大部分:Kafka基础入门,APIS,Kafka配置,Kafka设计思想及实现,操作,安全,Kafka 连接器及Kafka streams。几乎涵盖了Kafka所有的知识点。

第一部分:Kafka基础入门

这一部分是学习Kafka的准备阶段,Kafka的发展,使用案例,下载及历史版本,都在这一部分进行了详细的描述。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第二部分:APIS

kafka包括五个核心APIS,在这一部分中分别对其进行了详解。

1. Producer API允许应用程序将数据流发送到Kafka集群中的主题。
2. Consumer API允许应用程序从Kafka集群中的主题读取数据流。
3. Streams API允许将输入主题中的数据流转换为输出主题。
4. Connect API允许实现将数据不断从某些源系统或应用程序中输入Kafka的连接器,或从Kafka输入某些接收器系统或应用程序。
5. AdminClient API允许管理和检查主题,代理和其他Kafka对象。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第三部分:配置

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第四部分:设计思想

这一部分介绍了Kafka的设计思想以及一些重要概念解析:生产者,备份,消息分发策略,日志压缩······

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第五部分:实现思路

第五部分承接第四部分的内容,对Kafka的实现思路进行了详尽介绍。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第六部分:Kafka操作

接下来就进入了实操阶段,基本原理,基础概念了解清楚之后正式开始上手,这一部分的内容会比较多,是基于LinkedIn使用Kafka作为生产系统的一些使用经验。基础配置,硬件操作系统及监控,zookeeper等内容都需要在本章掌握。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第七部分:Kafka安全

Kafka具有特性,通过单独使用或者⼀起使用这些特性,提高了Kafka集群的安全性。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第八部分:Kafka连接器

这一部分主要介绍了:Kafka Connect ——⼀款可扩展并且可靠地在 Apache Kafka 和其他系统之间进行数据传输的工具。

Kafka Connect 可以摄取数据库数据或者收集应用程序的 metrics 存储到 Kafka topics,使得数据可以用于低延迟的流处理。一个导出的 job 可以将来自 Kafkatopic 的数据传输到二级存储,用于系统查询或者批量进行离线分析。

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

第九部分:Kafka Streams

Kafka Streams 是一个用于处理和分析存储在 Kafka 系统中的数据的客户端库。它建立在重要的流处理概念上,如恰当地区分事件时间(event time)和处理时间(processing time),支持窗口操作(window),exactly-once 处理语义以及简单高效的应用程序状态管理。Kafka Streams 的入门门槛很低。我们可以在单节点环境上快速实现一个小规模的验证性的程序,只要程序能在多节点的集群环境成功运行即可部署到高负载的生产环境。Kafka Streams 通过利用Kafka 的并行模型实现对相同应用程序的多个实例的负载平衡,这对于用户来说是透明的。

5、 RocketMQ

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等

 

RocketMQ是阿里开源的消息中间件,纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,支撑了阿里多次双十一活动。

因为是阿里内部从实践到产品的产物,因此里面很多接口、api并不是很普遍适用。可靠性毋庸置疑,而且与Kafka一脉相承(甚至更优),性能强劲,支持海量堆积。


教程分享:《Apache RocketMQ v4.7.1 开发者指南》

pdf来源网络,侵删

最新使用文档请移步至官网:
http://rocketmq.apache.org/

常见5种消息队列介绍及入门教程!ActiveMQ、kafka、RabbitMQ等
ps:全部学习资料已打包,戳这领取!
ps:全部学习资料已打包,戳这领取!
ps:全部学习资料已打包,戳这领取!

分类:

技术点:

相关文章: