1
zhady009 178 天前
用一个 BlockingQueue 的分布式实现 比如 Redisson 里的
线程池用这个队列来创建 |
![]() |
2
BigBrother1024 178 天前 via iPhone
用 actor 模型
|
![]() |
3
Saxton 178 天前
这不就是典型的队列吗
|
![]() |
5
teem 178 天前
TDMQ
|
![]() |
6
Itoktsnhc 178 天前
很像是 kafka 的一套东西
多条队列(或者队列内分区)(q1,q2,q3) 1. 消息在队列内的分布上需要考虑同一个 UserId 的消息有 FIFO 的顺序。(UserId Hash 保证落到同一个队列 /分区内) 2. 每一个队列(分区)的接收者需要做绑定,用类似锁的机制处理 receive 的断链和补位 q1->r1 |
7
siweipancc 177 天前 via iPhone
用户任务表与对应的独占队列. 先拿不存在执行时间点的锁(按顺序遍历立马返回),pop 任务,写执行时间点到任务表。任务完成做行移除。视业务重要程度需要一个守护线程做失败任务重新提交
|
8
wqhui 177 天前
@keshao 为什么要空转,redis 里面一个用户一个 list (里面放这个用户要执行的导入任务,比如文件名),当你一个线程要提交任务的时候,先去查一下 redis 有没这个 list ,把执行任务需要的参数加到这个 list 末尾,如果原本没有这个 list ,代表现在这个用户没有执行着的任务,启动一个工作线程去执行,工作线程完成当前任务后,检查下自己这个用户的 list 是不是空的,空的就删除这个 list 结束工作线程,不空就在这 list 取下一个任务执行。参考下 netty
|
9
night98 177 天前
rocketmq 顺序消息,用户 id 做 msg id ,完事,其他的就是楼上说的,手动实现单用户队列,创建线程处理
|
10
Jooooooooo 177 天前
你了解下消息队列
要处理的任务统一往队列发 然后消费线程设置成 1, 就是一个消息一个消息串行消费了 |