订单使用延迟队列如何来进行倒计时时间

我使用laravel里面的队列来给未付款订单进行倒计时,如何把订单剩余的时间给查询出来。我现在使用的方式是(过期时间 - 当前时间)= 剩余时间,想问下大家是咋做的

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

现在你的方法基本上就已经是最优解了,如果你想直接从队列中获取过期时间的话反而比较麻烦, laravel 用的是 redis 有序集合来做的延迟队列, 要获取你当前订单的过期时间比较复杂

2年前 评论
中文 (楼主) 2年前
讨论数量: 9

file,这是我之前项目中使用redis的订阅功能来监控未接单的情况,你可以参考一下

另:
订阅redis键的失效时间,在键的规则里面加上订单的ID,这样就可以了
Laravel

2年前 评论

没什么不对呀

2年前 评论
中文 (楼主) 2年前

比如说你设置的是半小时过期,那你就和当前时间对比不就是剩余时间,没那么复杂吧

2年前 评论

redis 有一个获取过期时间的命令,你看一下,应该可以

2年前 评论
中文 (楼主) 2年前

file,这是我之前项目中使用redis的订阅功能来监控未接单的情况,你可以参考一下

另:
订阅redis键的失效时间,在键的规则里面加上订单的ID,这样就可以了
Laravel

2年前 评论
zyxcba
  1. 选择支持延时消息的队列产品(比如 nsq)
  2. 订单创建,emit OrderCreatedEvent 到 topic1,延时时间为订单的生命周期
  3. 订单支付,emit OrderPaidEvent 到 topic2
  4. topic2 的 consumer 在共享缓存中标记 order_xxx 已支付(过期时间需大于订单生命周期)
  5. topic1 的 consumer 听到消息,共享缓存检查订单是否支付,如果无缓存从 DB 检查,如果未支付,则转入订单关闭流程
2年前 评论

现在你的方法基本上就已经是最优解了,如果你想直接从队列中获取过期时间的话反而比较麻烦, laravel 用的是 redis 有序集合来做的延迟队列, 要获取你当前订单的过期时间比较复杂

2年前 评论
中文 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!