消息队列RabbitMQ| 青训营笔记

102 阅读2分钟

一、RabbitMQ是什么

RabbitMQ简称MQ是一套实现了高级消息队列协议的开源消息代理软件,简单来说就是一个消息中间件。是一种程序对程序的通信方法,其服务器也是以高性能、健壮以及可伸缩性出名的Erlang语言编写而成。

二、RabbitMQ作用

RabbitMQ的常见作用有三种,分别是服务间解耦、实现异步通信、流量削峰

主要实现了消费者和生产者之间的解耦,发送异步消息,高并发访问解决流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

常见的应用常见有:用户订单,库存处理;用户注册,发送手机短信邮件;商品秒杀和抢购等...

三、RabbitMQ六种消息模型

1、基本消息模型:

img

在上图的模型中,有以下概念:

  • P:生产者,也就是要发送消息的程序
  • C:消费者:消息的接受者,会一直等待消息到来。
  • queue:消息队列,图中红色部分。可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

2、work消息模型

工作队列或者竞争消费者模式

img

work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息,但是一个消息只能被一个消费者获取。

这个消息模型在Web应用程序中特别有用,可以处理短的HTTP请求窗口中无法处理复杂的任务。

3、Publish/subscribe(交换机类型: Fanout,也称为广播

img

4、Routing 路由模型(交换机类型:direct)

img

P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。

X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列

C1:消费者,其所在队列指定了需要routing key 为 error 的消息

C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息

5、Topics 通配符模式(交换机类型:topics)

img

每个消费者监听自己的队列,并且设置带统配符的routingkey,生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。

Routingkey一般都是有一个或者多个单词组成,多个单词之间以“.”分割,例如:inform.sms

通配符规则:

#:匹配一个或多个词

*:匹配不多不少恰好1个词

6、RPC

img

四、应用场景

场景一:用户订单,库存处理。【服务间解耦】

使用MQ前:

img

使用MQ后:

img

场景二:用户注册, 发送手机短信,邮件 。【实现异步通信】

img

场景三:商品秒杀和抢购。【流量削峰】

使用MQ前:

img

使用MQ后:

img