我需要处理用户的一系列数据处理,后边的任务依赖于前边的执行结果,所以要求不能存在并发,(一个调用发送成功后,再调用下一个事件消费)。
用户的数量是不断增加的,这种情况应该怎么实现呢
之前好像看你发过帖子,你这样涉及了动态增加消费者了,后期服务器也顶不住吧。可以去大群咨询一下
结合event来,比如用户的事件A-->B-->C-->D顺序执行,执行完A事件发个B事件依次类推
队列随用户不断增加怕不好弄,只能开尽可能多的进程,然后把用户分配到不同的进程去。
$threadTotal = $worker->count; //总进程数量 n $threadId = $worker->id; //当前进程编号 0 ~ (n-1) if ($data['user_id'] % $threadTotal != $threadId) { return; } //处理
他这样后期用户越多进程越多,内存感觉要爆炸了
进程数量不变是配置里面的count。 他的需求就两个点: 1、进程要多:因为用户多。 2、不能并发:只用用一个用户的任务始终分配到同一编号的进程,就不存在并发。
count
对啊,后面用户越多不是要继续增加进程吗
要解耦,不要从用户层面拆分队列,而是从任务层面拆分队列,
执行A成功->投递B->执行B成功->投递C->执行C成功->投递D->执行D,
任何用户只需要投递A任务,比如:{"uid":1,"task":"xxx"},剩下的BCD就会自动的按照顺执行,
如果将来用户量大了,你只需要增加ABCD的消费者即可
每一个用户一个队列的方案是不合理的.
之前好像看你发过帖子,你这样涉及了动态增加消费者了,后期服务器也顶不住吧。可以去大群咨询一下
结合event来,比如用户的事件A-->B-->C-->D顺序执行,执行完A事件发个B事件依次类推
队列随用户不断增加怕不好弄,只能开尽可能多的进程,然后把用户分配到不同的进程去。
他这样后期用户越多进程越多,内存感觉要爆炸了
进程数量不变是配置里面的
count。他的需求就两个点:
1、进程要多:因为用户多。
2、不能并发:只用用一个用户的任务始终分配到同一编号的进程,就不存在并发。
对啊,后面用户越多不是要继续增加进程吗
要解耦,不要从用户层面拆分队列,而是从任务层面拆分队列,
执行A成功->投递B->执行B成功->投递C->执行C成功->投递D->执行D,
任何用户只需要投递A任务,比如:{"uid":1,"task":"xxx"},剩下的BCD就会自动的按照顺执行,
如果将来用户量大了,你只需要增加ABCD的消费者即可
每一个用户一个队列的方案是不合理的.