
1 Kinnice 2018-12-16 12:32:52 +08:00 via Android redis |
2 rockyou12 2018-12-16 12:38:30 +08:00 消息生产者吧未推送的消息放进队列里,用 redis、或者 kafka、rabbitmq 这些都行。发送者订阅队列然后发送,不要用定时任务循环查表表。 |
4 lifespy 2018-12-16 16:56:18 +08:00 分组推送,不要一次全部推送 |
5 lihongjie0209 2018-12-16 16:59:26 +08:00 这是一个并发定时任务的问题, 把定时任务设置为禁止并发执行就可以, 或者是有一个全局锁保证只有一个定时任务在运行 |
6 opengps 2018-12-16 17:05:56 +08:00 via Android 消息队列,取过的数据在就读取不到了 |
8 CallMeReznov 2018-12-16 17:10:55 +08:00 rabbitmq |
9 loveCoding 2018-12-16 17:23:59 +08:00 存个任务状态标识就行了,用户量不多,不要搞那么复杂. MQ 作为消费者一直会有 listener 监听 topic 消息并消费,不需要干预 |
10 wd 2018-12-16 17:49:08 +08:00 via iPhone 简单处理的话,每条消息加一个标记呗,表示未推送,正在推送,已经推送 |
11 wd 2018-12-16 17:50:19 +08:00 via iPhone 或者就是启动任务的时候,检查下钱一个任务是不是完了。 |
12 wuYin 2018-12-16 17:56:50 +08:00 via Android 以前用 curl_multi 硬核实现过类似推送 [允悲] |
13 myhot21 2018-12-16 17:59:10 +08:00 via Android 这需求和消息队列完全一样。 |
14 agdhole 2018-12-16 18:12:55 +08:00 量小的话简单的消息队列就行,php 也有很多这方面的轮子 |
15 hcheng 2018-12-16 22:09:43 +08:00 我们用了 flock 这个命令,老哥可以去了解下 |
16 alcarl 2018-12-16 22:34:24 +08:00 via Android 。。。。。。。。定时任务 select 扫出来,扔到推送之前加个推送中的状态和发起推送时间就可以了,再加一个定时任务处理发起推送时间超过 10 分钟状态仍然没变成已推送的,重新改发起推送时间,重新推,还可以加个推送次数,判断推几次就不推了。。。。。。别问我怎么知道的(T _ T) |
19 uoddsa OP |
20 junbaor 2018-12-17 16:27:08 +08:00 如果是全体用户推的话那就不用这么浪费空间给每个用户存一行,我们是单独有一个全局消息表,用户拉自己消息的同时也会拉取全局消息,合并后返回给客户端。全局消息还有类似 tag 一样的东西和用户 tag 进行匹配。 |