RabbitMQ学习笔记

消息队列的应用场景

同步调用:“添加商品”操作的业务功能有三个,可能每个业务都需要花费1秒种,那么依次执行完三个业务就花费了3秒才能返回结果。
RabbitMQ学习笔记
异步通信:执行“添加商品”操作时,只需要给交换机发送一条消息,交换机上绑定了三个队列,交换机将消息发送给队列,三个业务服务监听队列,一旦监听到队列上有消息,就执行相应的消息。这样的通信方式只需要给交换机发送了消息就能返回结果,其他的具体业务会自行执行。
RabbitMQ学习笔记
消息队列改变了服务间的通信方式,使用消息队列可以节省提供业务代码花费的时间。

RabbitMQ

  • 组成部分
    生产者 : 消息的生产者,给交换机发送消息
    消费者 : 消息的消费者,监听队列,一旦监听到消息,就消费
    交换机 : 交换机用来决定消息发送到哪个队列上
    队列 : 接收交换机上发送过来的消息

  • 简单队列模式
    autoAck : true
    消费者无论是否处理完,都回复一个ack true

  • Work模式
    能够实现“能者多劳”,性能强的消费者多消费。
    basicQos(1) : 消费者告知broker一次值接收一条消息
    将自动Ack改成手动Ack,处理完消息后告诉broker可以发送下一条消息过来了,这样就能实现“能者多劳”。

  • 发布订阅者模式
    此模式要使用fanout交换机。
    此模式可以将一条消息发送给多个队列,被多个消费者消费。
    弊端:不能指定队列接收,绑定在交换机上的所有队列都会受到消息。

  • 路由模式
    此模式要使用direct交换机。
    解决“发布订阅者模式”的弊端,可以指定发送给绑定在交换机上的队列。
    在将队列和交换机进行绑定时,要指定routing-key。
    在生产者发送消息时,要指定routing-key。

  • 通配符模式
    让routing-key在匹配的时候达到模糊匹配的效果。
    通配符:
    *:匹配当前级 例如:roouting-key为java.*只能匹配java.api,不能匹配java.api.yes
    #:匹配多级 例如:roouting-key为java.#可以匹配java.api,也可以匹配java.api.yes

未完待续…