请教一个客服场景下的并发解决方案。假设1个客服可以服务10个用户,然后有10个客服。1.客服登录,用户请求分配客服,如果客服都在忙,则返回排队号,等有客服空闲时,则分配给排队队列队首的用户。2.客服随时会登录,退出。用户随时会加入,放弃排队。3.客服服应该平均分配,比如10个用户进来,应该是每个客服服务一个。Q:1.请问下这个队列怎么设计比较好?2.java中用什么并发集合比较合适?
2 回答

泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
我写一下大概的想法吧...每个客服都是一个单独的对象,这个对象上面存客服数据(工号,窗口号等等),还存一个正在处理的用户对象(暂时存着,目前还想不到是否有必要..)所有等待的用户存在一个有序列表里(比如linkedList).写一个管理器.管理所有客服对象和用户列表.这个管理器里加一个定时器.每隔几秒就调用一下用户分配的方法.这个方法里遍历所有客服对象.检查当前客服服务的用户数量,如果不满10个就从用户列表里取出一个加上.(这里可以增加一些判断,比如,记录一下最少的客服服务用户的数量,如果后面的客服有超过这个数量,就不分配给他新用户,而是等到下次调用这个方法的时候分配给服务用户少的客服..大概是这个意思,这样实现你的平均分配.ps:你也可以每次调用这个方法完最后给客服按照服务数量排序.这个方法是分配的核心代码.)集合的选用,选择有序的就行,不管是否同步,不同步的话,自己在外部加锁就可以了,并没有什么大的消耗.另一种方案是..每个客服处理完之后自己去队列里要用户,但是那个方案不太好控制平均分配,写出来的代码会比较怪,客服不仅要去要用户,还要去看别的客服处理的用户数量来判断自己要多少用户...很怪异..所以这个方案我倒是还没想到怎么弄...
添加回答
举报
0/150
提交
取消