有什么比较轻量级的定时任务队列么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dangyuluo
V2EX    程序员

有什么比较轻量级的定时任务队列么?

  •  
  •   dangyuluo 2017-01-24 02:48:20 +08:00 9820 次点击
    这是一个创建于 3184 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在开发一套电商系统,遇到一个难点。用户下单后半小时内必须支付,超时订单作废,商品自动释放。

    我现在的方法是在数据库内记录下单时间戳,并且在进入支付页面、执行支付等动作时检查是否超时。但是感觉这种被动的检查订单是否超时方法有点不优雅,每一项和订单有关的操作都需要这么繁琐得检查。

    我想使用一套定时触发的任务系统,比如用户下订单后就生成一个 1800 秒后执行的任务,任务内容为关闭订单+返回商品库存+向用户发送通知。我目前只使用了 rabbitMQ ,但是好像 rabbitMQ 并没有提供类似 cron 的定时任务功能。

    不知道大家有什么推荐的解决方案么?

    28 条回复    2017-01-25 19:35:31 +08:00
    dangyuluo
        1
    dangyuluo  
    OP
       2017-01-24 02:49:14 +08:00
    目前了解到有个服务叫 Atrigger ,能提供类似的功能,但是需要远程调用。而我希望能自己搭建服务。
    alexsunxl
        2
    alexsunxl  
       2017-01-24 03:04:59 +08:00
    @dangyuluo
    redis 有一个键到期事件,你可以把过期时间设成 1800s ,然后订阅事件去检查订单状态。
    感觉这个应该够用, 不要过度设计比较好吧。
    lhbc
        3
    lhbc  
       2017-01-24 03:37:02 +08:00
    楼主目前的实现是有大问题的
    商品一般都有库存,用户下订单后修改库存的数量,订单超时后应该释放商品
    按楼主目前的实现方式,下单后一直不支付并且不进入支付页面,那商品就被作废订单给锁定了

    赞同 @alexsunxl Redis 就足够了
    stamaimer
        4
    stamaimer  
       2017-01-24 07:24:24 +08:00 via iPhone
    python 的话有个 celery
    dangyuluo
        5
    dangyuluo  
    OP
       2017-01-24 07:38:53 +08:00 via iPhone
    @lhbc 目前要设计的就是抢购模式,锁定该订单。一旦支付失败,返回库存还可以继续购买。
    dangyuluo
        6
    dangyuluo  
    OP
       2017-01-24 07:40:24 +08:00 via iPhone
    @alexsunxl 程序目前没有使用 redis 的订阅功能,因此可能并不能实现。还是希望以回掉的方式进行
    gouchaoer
        7
    gouchaoer  
       2017-01-24 08:32:42 +08:00 via Android
    @alexsunxl 这个是哪个命令呢?
    sunorg
        8
    sunorg  
       2017-01-24 08:45:21 +08:00 via iPhone
    1.访客量不大时硬编码就好了
    2.归根结底还是锁资源加轮询,其他工具的实现 也大致如此,只是帮你实现好了而已。已有消息队列了,自己再写个代码即可,
    dangyuluo
        9
    dangyuluo  
    OP
       2017-01-24 08:57:55 +08:00
    @sunorg 理论上是这样,但是总觉得开源社区的代码更成熟吧,坑比自己写一个要少多了。
    dangyuluo
        10
    dangyuluo  
    OP
       2017-01-24 09:02:09 +08:00
    @lhbc 哦我懂你的意思了,你说的对。所以我需要加上定时取消订单的功能。
    chenjf2k
        11
    chenjf2k  
       2017-01-24 09:15:01 +08:00
    数据库定时任务,每分钟执行一次 SQL 脚本。
    janxin
        12
    janxin  
       2017-01-24 09:21:11 +08:00
    这种之前讨论过很多次了 t/334992
    mikaka
        13
    mikaka  
       2017-01-24 09:24:01 +08:00
    java 的话有延迟队列 DeplayQueue
    mikaka
        14
    mikaka  
       2017-01-24 09:27:07 +08:00
    @mikaka DeplayQueue -> DelayQueue
    stackboom
        15
    stackboom  
       2017-01-24 10:09:52 +08:00
    quartz
    snnn
        16
    snnn  
       2017-01-24 10:18:21 +08:00 via Android
    两种方式结合, double check 。
    内存中构造一个优先队列
    jyf
        17
    jyf  
       2017-01-24 10:22:12 +08:00
    beanstalkd
    pubby
        18
    pubby  
       2017-01-24 10:30:57 +08:00 via Android
    轻量就用 beanstalk
    mcfog
        19
    mcfog  
       2017-01-24 10:36:54 +08:00 via Android
    rabbitmq 有延时功能的,但因为是队列,所以 expiration 只检查队首元素,如果你的超时是固定 1800s 的话倒是够用了。 我有不少逻辑都是借助 rabbitmq 延时走的
    mcfog
        20
    mcfog  
       2017-01-24 10:38:08 +08:00 via Android
    队列的好处是不怕进程死掉, redis 事件没了就没了,队列不处理就一直压在队列里
    pubby
        21
    pubby  
       2017-01-24 10:52:32 +08:00 via Android
    @pubby 以前用 rabbitmq ,后来改 beanstalk 了。很多地方都用,爬虫、邮件、短信、各种任务处理。楼主的需求我也用它做过
    CallMeHoney
        22
    CallMeHoney  
       2017-01-24 11:04:19 +08:00
    beanstalk
    ahkxhyl
        23
    ahkxhyl  
       2017-01-24 11:06:25 +08:00
    beanstalkd
    l1905
        24
    l1905  
       2017-01-24 11:06:58 +08:00
    简单处理的话, 感觉可以写个 cron 脚本, 每分钟定时执行, 去扫描这些待支付订单是否已过期
    Mirana
        25
    Mirana  
       2017-01-24 11:09:53 +08:00
    放在 redis 有序队列里,定时轮询就可以
    star7th
        26
    star7th  
       2017-01-24 14:39:07 +08:00
    我写的 HTQ 的定时异步队列可满足要求

    https://github.com/star7th/htq
    mingyun
        27
    mingyun  
       2017-01-24 23:22:39 +08:00
    redis 简单
    yepinf
        28
    yepinf  
       2017-01-25 19:35:31 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6008 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 02:08 PVG 10:08 LAX 19:08 JFK 22:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86