RabbitMQ个人实践

2022-11-24 00:00:00 消息 队列 路由 死信 应答

前言

MQ(Message Queue)就是消息队列,其有点有很多:解耦、异步、削峰等等,本文来聊一下RabbitMQ的一些概念以及使用。

RabbitMq

案例

Springboot整合RabbitMQ简单案例

基本概念

  • Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  • Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  • Producer:消息生产者,就是投递消息的程序。
  • Consumer:消息消费者,就是接受消息的程序。

发布消息到RabbitMQ需要经过两步:

  1. producer → exchange
  2. exchange 根据 exchange 的类型和 routing key 确定将消息投递到哪个队列

工作流程

了解了RabbitMQ的一些概念,我们来捋捋使用RabbitMQ的流程:

  1. 创建Exchange
  2. 创建Queue
  3. 将Queue绑定进Exchange中(此处会设置routing key)
  4. 生产者发布消息
  5. 消费者订阅消息

交换机(Exchange)

交换机可以绑定队列,绑定时可以给队列指定路由(Routing key)和参数(Arguments)

所有的消息发送都是经过交换机转发到队列的,而不是直接到队列中

交换机类型:

  • direct

    根据确定的路由(routing key)转发消息到队列中(一条消息可以发到多个队列,只要路由相同)

  • fanout

    路由,只要和该交换机绑定的队列,都能接收到消息

  • topic

    允许路由使用*和#来进行模糊匹配

    *表示一个单词

    表示任意数量(零个或多个)单词

    例如:如果队列的路由为com.# 那么往交换机发消息是,路由填com.ccc 队列就可以收到消息

  • headers

    忽略路由,由参数(Arguments)来确定转发的队列

消息过期时间TTL

有两种方式设置TTL,创建队列时设置整个队列的TTL或者在发送消息时单独设置每条消息的TTL,消息存活时间取两者的小值。

  1. 创建队列时设置

    是消息的存活时间,不是队列的存活时间,别搞混了。

    相关文章