什么是RabbimMQ
MQ(MessageQueue)消息队列,是分布式系统中的通信手段,在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信 RabbimMQ是MQ众多产品中表现比较优秀的产品之一
分布式系统之间的通信方式有两种
远程访问直接通信
通过第三方工具间接通信
MQ总结
1 MQ,消息队列.存储消息的中间价
2 分布式系统通信方式有两种:直接远程访问和借助第三方完成间接通信(MQ就属于后者)
3 发送方(生产消息)的称为生产者,接受方(消费)消息称为消费者
- MQ的优势和劣势
优势
1 应用解耦(提升系统的容错性和可维护性)
传统分布式系统 如果分布式系统中某个系统出错,会影响整个系统,系统的耦合性越高,容错率就越低,可维护性就越低
使用MQ的分布式系统使得应用间解耦,提升容错性和可维护性
2 异步提速(提升用户体验和系统吞吐量)
传统分布式系统,一个操作要耗时大量时间,响应太慢,用户的体检比较差
使用MQ的分布式系统,异步处理,MQ只需要告诉用户操作成功或者失败,不需要管其他系统的反馈,提升用户体验和系统吞吐量(单位时间内处理请求的数目)
3 削峰填谷(提高系统稳定性)
传统的分布式系统,不能保证用户的并发量,如果并发量太大,系统会宕机,用户体检极差
使用MQ的分布式系统,全部的并发量不会直接访问系统,而是直接由MQ接收,然后再由系
统慢慢从MQ拉取请求进行处理,保证了系统的稳定性
劣势
1 系统可用性降低
系统引入的外部依赖越多,需要维护保证稳定的东西就越多,一旦MQ宕机,就会对业务造成影响
2 系统复杂度提高
MQ的加入大大的增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ异步调用,需要考虑并解决消息有没有被重复消费,怎么处理消息丢失情况,怎么保证消息传递的顺序性
3 一致性问题
A系统处理完业务,通过MQ给B,C,D三个系统发消息数据,如果B系统,C系统处理成功,D系统处理失败,如何保证消息数据处理的一致性
- 使用MQ需要满足什么样的条件
1 生产者不需要从消费者处反馈,引入消息队列之前的直接调用,其接口的返回值应该为空
2 允许短暂的不一致性
3 确实使用之后有效果,即解耦,提速,削峰这些方面的收益超过加入MQ,管理维护MQ这方面的成本,如果是一个简单的功能,引用MQ之后让系统变得更为复杂,这就没有使用MQ的必要了
- 常见的MQ产品
目前业界有很多的MQ产品,例如RabbitMQ,RocketMQ,ActiveMQ,Kafka,ZeroMQ,MetaMQ等,也有直接使用Redis充当消息队列的案例,而这些消息队列产品,各有侧重,在实际选型时,需要结合自身需求以及MQ产品特征,综合考虑
RabbitMQ和Spring是一家公司,和Spring可依赖度很高
- RabbitMQ简介
AMQP协议
AMQP,即Advanced Message Queing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制,2006年,AMQP协议发布,类比HTTP协议
2007年,Rabbit技术公司基于AMQP协议标准开发RabbitMQ1.0发布,RabbitMQ采用Erlang语言开发,Erlang语言由Ericson设计,专门为开发高并发和分布式系统的一种语言,在商业广泛使用
RabbitMQ的六种工作模式
RabbitMQ提供了六种工作模式:simple简单模式、work工作模式、publish/subscribe订阅模式、routing路由模式、topic 主题模式、RPC远程调用模式。
JMS
JMS即Java服务(JavaMessageService)应用程序接口,是一个Java平台中关于面向消息中间件的API,它是JavaEE规范的一种,类似JDBC
很多消息中间件都实现类JMS规范,类如:ActiveMQ,但是RabbitMQ官方没有提供JMS的实现包,但是开源社区有,有免费的也有收费的
RabbitMQ总结
1 RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品
2 RabbitMQ提供了六种工作模式
3 AMQP是一个协议,类比HTTP
4 JMS是API规范接口,类比JDBC