结合rabbitmq 的延迟队列实现类似未支付订单三十分钟自动取消功能,替代传统的采用后台定时任务方式取消过期订单的功能
了解一下rabbitmq中的基本术语
- 交换器 exchange: 消息首先到达mq中的地方
- 队列 queue: 消息最终落地mq的地方
- 路由键 routingKey: 消息到达exchange之后怎么知道需要去哪个队列中,就是根据路由键去匹配
在rabbitmq中,队列和交换器是需要绑定的,绑定的时候需要指定前面说的路由键
rabbitmq中分为四种交换器,分别为Direct, Fanout, Topic, Header 下面分别简述一下
-
Direct 直接交换器,顾名思义,就是单一的路由规则,rabbitmq内置了一个Default Exchange 就是Direct类型的,当你申明一个队列未绑定交换器时,rmq会自动将该交换器绑定到默认的交换器,并指定路由键就是队列的名字。
-
Fanout 广播交换器,可以理解为一个消息到达该交换器后,会由该交换器将消息广播到所有绑定该交换器的队列中,且队列绑定时不需要指定路由键
-
Topic 通配符交换器,可以理解为该队列存在的意义就是可以将多种路由键的消息通配到一个队列中,比如你申明一个Topic 交换器,同时申明一个队列为ErrorQueue,绑定交换器时指定路由键为*.log,则所有生产的消息指定的路由键为a.log,b.log,c.log的消息都会进入该ErrorQueue队列。
-
Header 此交换器已经基本不再使用
rabbitmq中延迟分为两种
1: 每一条消息上设置过期时间
2: 整个队列设置过期时间