RabbitMQ消息队列、AMQP协议、核心概念、组件、六大模式、三种高频模式、集成SpringBoot、发布订阅模式(fanout)、路由模式(Direct)、主题模式(topic)

rabbitMQ是erlang语言开发,所以运行RabbitMQ之前必须下载版本合适的erlang。

RabbitMQ

RabbitMQ是一个基于AMQP协议实现的消息队列中间件,可以实现异步处理,流量削峰,系统解耦。

消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信 。

排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

AMQP协议

即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等

四大核心概念

  • 生成者:
    • 产生数据发送消息的程序是生产者。
  • 交换机
    • RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定
  • 队列
    • 消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据
  • 消费者
    • 一个队列中的消息只能被一个消费者接收;同一条消息被交换机发给多个队列,那么这条消息可以被多个消费者接收。
    • 消费者只能接收消息,分发到具体的处理者,消费者本身不处理消息。

RabbitMQ组件

ConnectionFactory(连接管理器):应⽤程序与Rabbit之间建⽴连接的管理器,程序代码中使⽤。
Channel(信道):消息推送使⽤的通道。
Exchange(交换器):⽤于接受、分配消息。
Queue(队列):⽤于存储⽣产者的消息。
RoutingKey(路由键):⽤于把⽣成者的数据分配到交换器上。BindingKey(绑定键):⽤于把交换器的消息绑定到队列上。

使用场景

  1. 解耦

    • 订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
    • 库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作
    • 实现订单系统与库存系统的应用解耦 , 在下单时库存系统不能正常使用。也不影响正常下单,因为下单 后,订单系统写入消息队列就不再关心其他的后续操作 , 为了保证库存肯定有,可以将队列大小设置成库存数量
  2. 异步提升效率

  3. 流量削峰

  • 秒杀活动 , 每秒并发请求量增至1万条,但是系统最大的处理能力只能每秒处理1000个请求
  • 高峰期的时候,每秒请求有5000个请求左右,将这5000请求写入MQ里面,系统A每秒最多只能处理2000请求,因为MySQL每秒只能处理2000个请求。系统A从MQ中慢慢拉取请求,每秒就拉取2000个请求,不要超过自己每秒能处理的请求数量即可

RabbitMQ 6种模式

  1. simple简单模式
    • 消息产生者将消息放入队列,消息的消费者(consumer) 监听(while) 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除
    • 隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失
  2. work工作模式(资源的竞争)
    • 消费者可以有多个,消费者1,消费者2,同时监听同一个队列,消息被消费?C1 C2共同争抢当前的消息队列内容,谁先拿到谁负责消费消息
    • 高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关(syncronize,与同步锁的性能不一样) 保证一条消息只能被一个消费者使用
    • 应用场景:红包;大项目中的资源调度
  3. publish/subscribe发布订阅(共享资源)
    • 消息产生者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费
    • 应用场景:邮件群发,群聊天,广播(广告)
  4. routing路由模式
    • 消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;
    • 使用场景: 错误、异常通知,可以将程序中的错误封装成消息传入到消息队列中,开发者可以自定义消费者,实时接收错误;
  5. topic 主题模式(路由模式的一种)
    • 路由功能添加模糊匹配,消息产生者产生消息,把消息交给交换机,交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
  6. RPC(不是MQ)

Springboot集成RabbitMQ

三大常用模式

Fanout(发布订阅)模式、Direct( 路由 ) 模式、Topic (主题)模式

Fanout模式

  • pom文件

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
    <dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit-test</artifactId>
    <scope>test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值