一、RabbitMQ是什么
RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法,其服务器也是以高性能、健壮以及可伸缩性出名的Erlang语言编写而成。
二、RabbitMQ作用
RabbitMQ的常见作用有三种,分别是服务间解耦、实现异步通信、流量削峰。
主要实现了消费者和生产者之间的解耦,发送异步消息,高并发访问解决流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
常见的应用常见有:用户订单,库存处理;用户注册,发送手机短信邮件;商品秒杀和抢购等...
三、RabbitMQ六种消息模型
1、基本消息模型:
在上图的模型中,有以下概念:
- P:生产者,也就是要发送消息的程序
- C:消费者:消息的接受者,会一直等待消息到来。
- queue:消息队列,图中红色部分。可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。
2、work消息模型
工作队列或者竞争消费者模式
work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息,但是一个消息只能被一个消费者获取。
这个消息模型在Web应用程序中特别有用,可以处理短的HTTP请求窗口中无法处理复杂的任务。
3、Publish/subscribe(交换机类型: Fanout,也称为广播 )
4、Routing 路由模型(交换机类型:direct)
P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。
X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列
C1:消费者,其所在队列指定了需要routing key 为 error 的消息
C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息
5、Topics 通配符模式(交换机类型:topics)
每个消费者监听自己的队列,并且设置带统配符的routingkey,生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。
Routingkey一般都是有一个或者多个单词组成,多个单词之间以“.”分割,例如:inform.sms
通配符规则:
#:匹配一个或多个词
*:匹配不多不少恰好1个词
6、RPC
四、应用场景
场景一:用户订单,库存处理。【服务间解耦】
使用MQ前:
使用MQ后:
场景二:用户注册, 发送手机短信,邮件 。【实现异步通信】
场景三:商品秒杀和抢购。【流量削峰】
使用MQ前:
使用MQ后: