1、MQ概述:mq,消息队列,存储消息的中间件,
分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信
发送方称为生产者,接收方称为消费者
2、mq的优劣势
优势:应用解耦(使用mq使得应用间解耦,提升容错性和可维护性)、异步提速(提升用户体验和系统的吞吐量(单位时间内处理请求的数目))、削峰填谷(提高系统稳定性)
劣势:系统可用性降低(系统引入的外部依赖越多,系统稳定性越差,一旦mq宕机,就会对业务造成影响)、系统复杂性提高(mq的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过mq进行异步调用)、一致性问题
3、使用mq需要满足什么条件?
1、生产者不需要从消费者处获得反馈。
2、容许短暂的不一致性
3、确实是用了有效果,即解耦,提速,削峰,这些方面的收益,超过加入mq、管理mq的这些成本
4、rabbitMq(基于AMQP标准开发的)简介:rabbit技术公司基于AMQP标准开发的RabbitMQ1.0发布。RabbitMQ采用Erlang语言开发。Erlang语言由Ericson设计,(专门为开发高并发和分布式系统的一种语言)。
定义简单的说:RabbitMQ是基于AMQP协议使用Erlang语言开发的一款消息队列产品
5、AMQP,即:Advanced Message Queuing Protocol (高级消息队列协议)是一个网络协议,是应用层协议的一个
开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不 同产品,不同的开发语言等条件的限制。
6、JMS 即java消息服务(javaMessage service)应用程序接口,是一个java平台中关于面向消息中间件的API
JMS是javaEE规范中的一种,类比jdbc
7、RabbitMQ提供了6种工作模式:简单模式、work queues 、publish/subscribe发布与订阅模式、routing路由模式、topics主题模式、RPC远程调用模式
8、简单模式
生产者:也就是要发送消息的程序
消费者:消息的接收者,会一直等待消息到来
queue:消息队列,类似于一个邮箱,可以缓存消息,生产者向其中投递消息,消费者从其中取出消息
9、work queues(工作队列模式)
work queues :与入门的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息
应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度
10、pub/sub订阅模式
在订阅模型中,多了一个Exchange角色,而且过程略有变化
生产者:也就是要发送消息的程序,但是不在发送到队列中,而不是发给X(交换机)
消费者:消息的接收者,会一直等待消息到来
Queue:消息队列,接收消息、缓存消息
Exchange:交换机(X)。一方面,接收生产者发送的消息,另一方面,知道如何处理消息
例如递交给某个特别队列、递交给所有队列、或者将消息丢弃。到底如何操作,取决于Exchange的类型
Exchange有常见一下3种类型:
Fanout:广播,将消息交给所有绑定到交换机的队列
Direct:定向,把消息交给符合指定routing key的队列
Topic:通配符,把消息交给符合routing pattern(路由模式)的队列
Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合
路由规则的队列,那么消息会丢失。
11、Routing路由模式
队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
消息的发送方在向Exchange发送消息时,也必须指定消息的RoutingKey
Exchange不再把消息交给每一个绑定的队列,而是根据消息的RoutingKey进行判断,只有队列的
RoutingKey与消息的RoutingKey完全一致,才会接收到消息
12、Topics通配符模式
Topic主题模式可以实现pub/sub发布与订阅和Routing路由模式的功能,只是Topic在配置routing key
的时候可以使用通配符,显得更加灵活