首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

app 的推送系统(阿里云推送)怎么设计

  •  
  •   uoddsa · 124 天前 · 1902 次点击
    这是一个创建于 124 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司现在的系统是一个推送的消息表,用户的消息记录表(用户个人中心要看到记录)。
    每次添加广播(全体推送)的时候,在消息表添加一条记录,然后在用户的消息记录表添加上了所有用户的记录...
    定时任务的间隔都是一分钟,一次拿取所有未推送的记录然后推送出去。然后这里就有一个 bug,前一分钟拿到的所有记录未推送完,也就是推送的状态未修改完,下次推送的定时任务有进行,就会造成重复推送了。
    各位大佬你们的这个相关的是怎么设计的。
    20 回复  |  直到 2018-12-17 16:27:08 +08:00
        1
    Kinnice   124 天前 via Android
    redis
        2
    rockyou12   124 天前
    消息生产者吧未推送的消息放进队列里,用 redis、或者 kafka、rabbitmq 这些都行。发送者订阅队列然后发送,不要用定时任务循环查表表。
        3
    uoddsa   123 天前
    @rockyou12 谢谢,查过相关的内容,但是不定时的话,什么时候可以触发消费者进行消费呢。
        4
    lifespy   123 天前
    分组推送,不要一次全部推送
        5
    lihongjie0209   123 天前
    这是一个并发定时任务的问题, 把定时任务设置为禁止并发执行就可以, 或者是有一个全局锁保证只有一个定时任务在运行
        6
    opengps   123 天前 via Android
    消息队列,取过的数据在就读取不到了
        7
    rockyou12   123 天前
    @uoddsa 发布订阅机制,生产者发布了消费者会马上知道,如果消费者消费速度慢了,消息就堆积在队列上
        8
    CallMeReznov   123 天前
    rabbitmq
        9
    loveCoding   123 天前
    存个任务状态标识就行了,用户量不多,不要搞那么复杂.
    MQ 作为消费者一直会有 listener 监听 topic 消息并消费,不需要干预
        10
    wd   123 天前 via iPhone
    简单处理的话,每条消息加一个标记呗,表示未推送,正在推送,已经推送
        11
    wd   123 天前 via iPhone
    或者就是启动任务的时候,检查下钱一个任务是不是完了。
        12
    wuYin   123 天前 via Android
    以前用 curl_multi 硬核实现过类似推送 [允悲]
        13
    myhot21   123 天前 via Android
    这需求和消息队列完全一样。
        14
    agdhole   123 天前
    量小的话简单的消息队列就行,php 也有很多这方面的轮子
        15
    hcheng   123 天前
    我们用了 flock 这个命令,老哥可以去了解下
        16
    alcarl   123 天前 via Android
    。。。。。。。。定时任务 select 扫出来,扔到推送之前加个推送中的状态和发起推送时间就可以了,再加一个定时任务处理发起推送时间超过 10 分钟状态仍然没变成已推送的,重新改发起推送时间,重新推,还可以加个推送次数,判断推几次就不推了。。。。。。别问我怎么知道的(T _ T)
        17
    uoddsa   123 天前
    @rockyou12 好的,谢谢老哥。
        18
    uoddsa   123 天前
    @wd 现在已经有状态这个字段了,只不过是边推边改,后续的定时任务来了就拿到了上次未修改的记录了。
        19
    uoddsa   123 天前
    @hcheng
    @agdhole
    @loveCoding
    @CallMeReznov
    谢谢各位老哥,我参考一下~
        20
    junbaor   122 天前
    如果是全体用户推的话那就不用这么浪费空间给每个用户存一行,我们是单独有一个全局消息表,用户拉自己消息的同时也会拉取全局消息,合并后返回给客户端。全局消息还有类似 tag 一样的东西和用户 tag 进行匹配。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3739 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 71ms · UTC 06:55 · PVG 14:55 · LAX 23:55 · JFK 02:55
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1