V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kwklover
V2EX  ›  程序员

请教大家一个定时发送消息的实现思路

  •  
  •   kwklover · 2018-09-08 20:24:18 +08:00 via Android · 4410 次点击
    这是一个创建于 2297 天前的主题,其中的信息可能已经有所发展或是发生改变。
    WEB 架构的项目,是一个预约系统,需要在客户预约时间前三十分钟发送一条短信提醒客户,我想到的方案是做个定时器定时访问指定页面,在页面里实现发送短信的逻辑,我想请教下其他的解决方式。最好是无需维护的方案,项目交付客户之后,不能老是去监控定时器挂了没吧?
    15 条回复    2018-09-09 23:26:56 +08:00
    shiny
        1
    shiny  
       2018-09-08 20:28:03 +08:00
    需要你交待下技术选型背景,什么语言什么框架。比如 node 下的 egg.js 自带定时器,稳如老狗。
    jybox
        2
    jybox  
       2018-09-08 20:32:24 +08:00   ❤️ 1
    无需维护的还是机器自带的 crontab 比较稳,写个 curl 命令访问你的 HTTP API 就可以了。

    如果需要消除单点的话,可以同时在多个机器上配置 crontab,然后在你的程序( HTTP API )里访问 Redis 或其他数据库,加一个 30 分钟的锁避免重复触发。
    limuyan44
        3
    limuyan44  
       2018-09-08 20:51:01 +08:00 via Android
    既然是交付的,又不要维护,丢 db 里面开个定时任务慢慢扫吧,这种任务也不用精确
    FRankie222
        4
    FRankie222  
       2018-09-08 21:17:07 +08:00 via iPhone
    我做过一个需求,不知道和你说的是否相似,在数据库中按照主键存一个时间点,到了这个时间点给主键对应的信息发送消息,当时是用的定时任务每隔 2 分钟去跑一次,把里面的时间点和当前的比较,如果时间差在两分钟内,就发出去。数据量不大,每次也就一万多条
    brickyang
        5
    brickyang  
       2018-09-08 21:25:24 +08:00 via iPhone
    可以用 Redis 的过期键。客户预约时就新建一个到「提醒时间」过期的键,过期时 Redis 会有消息,通知系统订阅该消息即可。

    稳不稳主要看 Redis,用阿里云之类的服务基本可以放心。
    GGGG430
        6
    GGGG430  
       2018-09-08 21:27:14 +08:00 via iPhone
    延时消息队列
    kwklover
        7
    kwklover  
    OP
       2018-09-08 21:34:35 +08:00 via Android
    @shiny windows 平台 asp.net 技术,我目前想到的方案就是通过计划任务定时访问指定网页。
    kwklover
        8
    kwklover  
    OP
       2018-09-08 21:36:34 +08:00 via Android
    @limuyan44 用的是 mysql 数据库,没有用 redis 那么高级的技术啊
    thinkif
        9
    thinkif  
       2018-09-08 21:41:03 +08:00 via iPhone
    @kwklover asp.net 用 Hangfire 之类的都可以,手上有几个项目用的这个,很好用
    anonymous256
        10
    anonymous256  
       2018-09-08 22:05:58 +08:00 via Android
    daimazha
        11
    daimazha  
       2018-09-08 22:32:17 +08:00
    quartz
    kwklover
        12
    kwklover  
    OP
       2018-09-08 22:44:26 +08:00 via Android
    楼上的方案用来发送短信提醒可以,不过还有一个需求是定时下发微信客服消息,微信会校验域名,似乎不行哦
    xiexingjia
        13
    xiexingjia  
       2018-09-08 22:49:56 +08:00
    letitbesqzr
        14
    letitbesqzr  
       2018-09-09 22:15:42 +08:00
    @brickyang #5 是说的 keyspace notification 这个特性吧。 被这东西坑的,少记录了一堆重要数据,数据量大的话,建议还是不要用了。。
    brickyang
        15
    brickyang  
       2018-09-09 23:26:56 +08:00 via iPhone
    @letitbesqzr #14 什么是「少记录了一堆东西」?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:54 · PVG 02:54 · LAX 10:54 · JFK 13:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.