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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

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

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

3年前 评论

没什么不对呀

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

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

3年前 评论

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

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

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

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

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

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

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

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