本文共 1356 字,大约阅读时间需要 4 分钟。
MQ概述
MQ,全称MessageQueue 消息队列,专门用作消息队列的中间组件叫做消息中间件,主要是用于应用之间通信。消费者、生产者可以使用不同语言编写。
使用场景|作用
- 模块之间的解耦。各模块通过消息中间件这个统一的接口来交换数据,无需耦合在一起,使各模块具有良好的扩展性。
- 流量削峰:常用于秒杀、日志处理。
- 可以实现异步操作,多操作并行
其它的场景比如存储bus总线的数据,数据变动通知对应服务。
MQ一般都有冗余机制,拥有多个数据备份,保证部分节点故障时,消息不会丢失。
java消息服务 JMS
JMS: 全称Java Message Service java消息服务,是sun公司早期推出的java消息标准,旨在为java应用提供统一的消息操作,包括create、send、receive。
JMS是java中的消息中间件接口,定义了java中标准消息传递的API,类似于JDBC,sun只规定标准、规范,由各MQ厂商提供具体实现。
JMS中的常见概念
- 消息message:数据对象
- 队列queue:存储待消费消息的区域
- 主题topic:一种支持发送消息给多个订阅者的机制
JMS的两种消息类型|发送模式
- 点对点 Point-to-Point(P2P):消息只会被一个消费者消费。多个消费者可以订阅同一个topic,对于这个topic的一则消息,只有其中一个消费者消费。
- 发布/订阅 Publish/Subscribe:消息可以被多个消费者消费。多个消费者都订阅同一个topic,对于这个topic的一则消息,订阅了此topic的消费者都会消费。
常见的消息中间件
1、ActiveMQ
- 老牌消息中间件;
- 吞吐量不高,多队列的时候性能下降,存在消息丢失的情况;
- 很少大规模使用。
2、Kafka
- 开源的流处理平台,由Scala和Java编写;
- Kafka是一个高吞吐量的分布式发布/订阅消息系统,是一个流处理平台,严格意义上不属于MQ,只是支持常规的MQ功能;
- Kafka并不是JMS规范的实现,只是提供了类似于JMS的特性;
- 高吞吐量、高性能,支持消息持久化到硬盘,使用副本集机制实现数据冗余,保障数据尽可能不丢失;
- 不支持事务,失败回滚不了,保证不了数据一致性
Kafka适合需要收集、处理大量数据,但对数据安全、一致性要求不高的项目,在大数据开发中用得多。
Kafka常用于处理大规模网站中的流数据,比如
- 收集日志
- 记录实时数据,监控运行状况
- 记录用户访问行踪,比如用户访问的页面、点击的条目、浏览时长、搜索的关键词,发送给订阅者来分析、挖掘用户偏好、消费能力
3、RocketMQ
- 阿里开源的消息中间件,纯java编写;
- 具有高吞吐量、高可用、高可靠性,支持事务,性能强劲(零拷贝技术),支持海量消息堆积, 支持指定次数和时间间隔的失败消息重发,支持consumer端tag过滤、延迟消息等;
- 适合大规模分布式系统应用,适合电商、互联网金融等领域;
- 偏向国内、阿里,社区相对不活跃
4、RabbitMQ
- 基于AMQP协议,使用Erlang编写,RabbitMQ是AMQP的一个实现,但AMQP并非只有RabbitMQ一个实现;
- 各方面的折中,可靠、稳定,性能、吞吐量都不错,支持事务。
转载地址:http://wzhlb.baihongyu.com/