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 进行匹配。
|