1.MQ的基本概念
- MQ概述
MQ全称 Message Queue (消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。
小结:
- MQ,消息队列,存储消息的中间键
- 分布式系统通信两种方式:直接远程调用 和 借助第三方完成间接通信
- 发送方称为生产者,接收方称为消费者
- MQ的优势和劣势
优势:
-
应用解耦
-
异步提速
-
销峰填谷
劣势:
- 系统可用性降低
- 系统复杂度提高
- 一致性问题
小结:
既然MQ有优势也有劣势,那么使用MQ需要满足什么条件呢?
-
生产者不需要从消费者处获得反馈。引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当成动作做完了继续往后走,即所谓异步成为了可能。
-
容许短暂的不一致性。
-
确实是用了有效果。即解耦、提速、削峰这些方面的收益,超过加入MQ,管理MQ这些成本。
2.RabbitMQ简介
AMQP,即 Advanced Message Queuing Protocol (高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP规范发布。类比HTTP。
2007年,Rabbit 技术公司基于AMQP标准开发的RabbitMQ 1.0发布。RabbitMQ采用Erlang语言开发。Erlang 语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。
2.1 JMS(类似于JDBC一样的东西)
JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件的API。
很多消息中间件都实现了JMS规范,例如:ActiveMQ。RabbitMQ官方没有提供JMS的实现包,但是开源社区有。
小结:
- RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品。
- RabbitMQ提供了6种工作模式,我们学习5种。这是今天的重点。
- AMQP是协议,类比HTTP。
- JMS是API规范接口,类比JDBC。