1. 名词解释
-
MQ:message queue,我们一般称作消息中间件或者消息队列,主要功能之一是解除或降低项目的耦合,降低服务器的压力
-
JMS:消息中间件的规范,属于一种API市面上RabbitMQ,RocketMQ等中间件均实现了这种规范
-
消息/message:一般指的是在MQ中传输的数据,有多种类型,可以是一个id或一个对象
-
point-to-point:点对点,ActiveMQ消息的传递方式之一,传递特点:一个或多个生产者发送消息时,无论有几个消费者,能够抓取到所有生产者的消息的只有一个,一般能抓取的消费者是最先启动的。
eg:线段 -
发布/订阅,ActiveMQ消息的传递方式之一,传递特点:一个或多个生产者发送消息时,如果有多个消费者,则每一个消费者都能够抓取到生产者的消息,但是在生产者发送消息时消费者必须在活跃/运行状态。
eg:内网通接收文件
-
topic:主题,存储消息的容器之一,使用topic存储消息即使用点对点(point-to-point)的方式传递消息
-
queue:队列,存储消息的容器之一,使用queue存储消息即使用发布-订阅(publish/subscribe)的方式传递消息
-
producer:消息生产者,由producer从程序中获取消息,并传输到queue或topic中,等待消费者提取
-
.customer:消息消费者,监听现有的queue或topic,发现有新的消息就可以抓取过来进行操作
2. JMS规定的消息类型
-
TextMessage:一个字符串对象
-
MapMessage:一套名称-值对
-
ObjectMessage:一个序列化的 Java 对象
-
BytesMessage:一个字节的数据流
-
StreamMessage:Java 原始值的数据流
3. 常见的几种消息中间件
-
ActiveMQ:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持-JMS1.1和J2EE 1.4规范的 JMS Provider实现,默认的协议是STOMP
-
RabbitMQ:使用Erlang语言编写,支持多种场景。支持多种协议,如:AMQP,XMPP, SMTP,STOMP。默认协议是AMQP,,也正是如此,使的它变的非常重量级,更适合于企业级的开发。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。
-
RocketMQ:阿里旗下开源的分布式,队列模型的消息中间件,原名MetaQ,3.0之后改名,是阿里参照kafka设计思想使用java实现的一套mq
-
ZeroMQ:据说是史上最快的消息队列系统
-
Kafka:Apache下的一个子项目 。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统。适合处理海量数据。
3. 各个中间件的区别
-
语言支持
-
ActiveMQ:支持,java优先
-
RabbitMQ:与语言无关
-
RocketMQ:只支持java
-
Kafka:支持,java优先
-
-
单机吞吐量:万级
-
ActiveMQ:万级
-
RabbitMQ:万级
-
RocketMQ:十万级
-
-
消息延迟:
-
ActiveMQ:毫秒级
-
RabbitMQ:微秒级
-
RocketMQ:毫秒级
-
-
社区活跃度
-
ActiveMQ:高
-
RabbitMQ:高
-
RocketMQ:中
-
-
商业支持
-
ActiveMQ:无
-
RabbitMQ:无
-
RocketMQ:阿里云
-
-
支持的协议
-
ActiveMQ:OpenWire,STOMP,REST,XMPP,AMQP
-
RabbitMQ:AMQP
-
RocketMQ:自己定义的协议
-
-
持久化方式
-
ActiveMQ:内存、文件、数据库
-
RabbitMQ:内存、文件
-
RocketMQ:磁盘文件
-
-
部署方式
-
ActiveMQ:嵌入,独立
-
RabbitMQ:独立
-
RocketMQ:独立
-
-
开发语言
-
ActiveMQ:java
-
RabbitMQ:erlang
-
RocketMQ:java
-
4. 常用使用场景
-
异步
-
削峰
-
解耦