名词概念

图片.png工作模式

一、简单模式

即一个生产者,一个消费者。这种模式下不需要将Exchange进行任何绑定操作。
图片.png

二、work模式

即一个生产者,一个队列,多个消费者(每个消息只会被一个消费者消费)
图片.png

三、订阅模式

即一个生产者,多个队列,多个消费者。这种模式需要提前将Exchange与Queue进行绑定。一个Exchang可以绑定多个Queue,一个Queue也可以同多个Exchange进行绑定。
图片.png

四、direct路由模式(完全匹配、单播的模式)

  1. 生产者发送消息到交换机要指定路由key
    2. 消费者将队列绑定到交换机时需要指定路由key
    3. 一个队列可以绑定多个路由
    图片.png

    五、topic通配符模式

    两个通配符:符号“#”和符号“”。#匹配0个或多个单词,匹配一个单词。
    图片.png

    六、Headers模式

    Header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配队列 。

    七、RPC模式

    RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:

  2. 客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。

  3. 服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
  4. 服务端将RPC方法 的结果发送到RPC响应队列。
  5. 客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

图片.png

RabbitMQ如何保证消息的可靠性

一、保证消息不丢失

  1. 开启事务(不推荐)
  2. 开启confirm(推荐)
  3. 开启RabbitMQ持久化(交换机、队列、消息)
  4. 关闭RabbitMQ自动ack(改手动ack)
  5. 配置消费重试

    二、保证消息不重复消费

  6. 幂等性(每个消息用一个唯一标识来区分,消费前先判断标识有没有被消费过,若已消费,则直接ACK)

    三、RabbitMQ如何保证消息的顺序性

    将消息放入同一个交换机,交给同一个队列,这个队列只有一个消费者,消费者只允许同时开启一个线程。

    四、RabbitMQ消息重试机制