消息中间件踩坑之旅(三)——RabbitMq延时任务处理

场景描述
  • 在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行异常处理。

  • 用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作。这时候就可以将用户的指令发送到消息队列里,进行延时处理。

如何实现?

#####因为博主知识浅薄,所以这里只提供两种简单的解决方案

方案一:使用延迟队列
用到知识:

死信队列 http://www.rabbitmq.com/dlx.html

  • 当该队列中的消息被拒绝、过期、或者队列达到最大长度。消息就会变成死信,然后被重新发送到另一个转换器。
  • 通过x-dead-letter-exchange设置转发的转换器
  • 可以携带routing-key ---- x-dead-letter-routing-key

过期时间TTL http://www.rabbitmq.com/ttl.html

  • 故名思意就是设置一个时间,超过这个时间,消息就过期了。
  • 其实这里有很多种设置方案,这里采用最合适的设置 message-ttl 值,这是在队列属性上设置的

一下代码基于SpringBoot

@Bean订单首次存在的死信队列
public Queue TradeQueue() {
   
    Map<String,Object> map = new HashMap<>();
    map.put("x-dead-letter-exchange","DLXExchange");  //设置重新发送的转换器名
    map.put("x-message-ttl",6000);//毫秒为单位          //过期时间
    return new Queue("TradeQueue"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值