rabbitmq基本概念解释

broker

可以理解为消息中间件服务,broker可以由一台主机提供也可以是由多台主机构成的集群组成

消息队列示意图

exchange

交换机,消息会传送到交换机,然后通过交换机根据routerkey发送到不同的queue。交换机是分发逻辑的抽象层,使队列的职责能够更加单一,只负责发送和接收。
交换机分为四种
1.直接绑定(direct)- routing key 完整匹配 binding key
2.话题(topic)- routing key 通配符匹配 binding key
3.广播模式(fanout)- routing key 发送至所有绑定的队列中
4.HEADER模式(header)- binding key 根据header里binding的key进行匹配
绑定模式

queue

消息队列,存储消息的数据队列

connection

tcp/udp连接

channel

tcp连接多路复用,一个tcp连接中可以使用多个channel。客户端跟queue直接使用一个channel进行连接,一个客户端可以通过一个tcp使用多个channel跟多个队列进行通信

producter

消息生产者,将消息push到消息队列中

consumer

消息消费者,监听队列并拉取消息

消息跟踪

tracing

带有GUI的firehose,通过 rabbitmq-plugins enable rabbitmq_tracing开启该插件功能,在user界面右边的tracing可以看到追踪日志

firehose

rabbitmqctl trace_on/trace_off 控制trace的开关

rabbitmq特殊队列

死信队列

死信产生的原因:

  • 有消息被拒绝(basic.reject/ basic.nack)并且requeue=false
  • 队列达到最大长度
  • 消息TTL过期

总的来说当一个信息投递不能被正常投递消费的时候,如果没有特殊的设置,这个消息会被丢弃,但是可以通过设置消息队列的x-dead-letter-exchange参数和x-dead-letter-routing-key指定死信交换机和路由(前提是死信交换机和死信队列必须存在),这样当消息无法被正常消费的时候消息会被投递到死信队列中

本质上死信交换机和死信队列也是普通的队列,唯一的特殊之处是别的业务队列在创建参数中指定了该交换机和队列作为保底

延迟队列

(待续)

springboot整合

整合步骤

  1. 引入依赖
  2. 配置rabbitmq的服务器参数
  3. 配置交换机和队列
  4. 使用rabbitTemplate进行消息投递
  5. 使用 @RabbitListener 进行消息监听

Q.E.D.


每一个平凡的日常都是连续的奇迹