客服分配并发场景,怎么设计比较好?
请教一个客服场景下的并发解决方案。
假设1个客服可以服务10个用户,然后有10个客服。
1.客服登录,用户请求分配客服,如果客服都在忙,则返回排队号,等有客服空闲时,则分配给排队队列队首的用户。
2.客服随时会登录,退出。用户随时会加入,放弃排队。
3. 客服服应该平均分配,比如10个用户进来,应该是每个客服服务一个。
Q:
1.请问下这个队列怎么设计比较好?
2.java中用什么并发集合比较合适?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1.用户存在一个队列里就好
2.用户放弃不用特殊处理,排到的时候叫号不答应扔掉找下一个
3.客服可以这样做:开一个线性表 n[11],它的每一个元素是一个链表,存着一些客服,其中 n[i] 存着正在服务 i 个用户的客服。每次一个客服新接到或服务完用户后,把它从 n[i] 中取出,放进 n[i - 1] 或 n[i + 1]。维护一个变量 s,表示当前服务用户最少的客服。每次 n[s] 有一个客服搬进 n[s - 1] 时令 s -= 1,n[s] 最后一个客服搬进 n[s + 1] 时令 s += 1。
栗子:
假设有三个客服
a,b,c
,每个客服最多服务三个用户:一开始,
来了一个用户,分配给客服
a
又来了一个用户,分配给客服
b
又来了一个用户,分配给客服
c
。注意到这个时候
n[s]
里只有一个客服了,然后这个客服被挪到n[s + 1]
,所以令s += 1
。然后客服
a
服务的客户走了,注意到a
就在n[s]
里,所以令s -= 1
。然后比如说又来了 6 个客户,分配完以后是这种情况:
我写一下大概的想法吧...
每个客服都是一个单独的对象, 这个对象上面存客服数据(工号,窗口号 等等), 还存一个正在处理的用户对象(暂时存着, 目前还想不到是否有必要..)
所有等待的用户存在一个有序列表里(比如 linkedList).
写一个管理器. 管理所有客服对象和用户列表.
这个管理器里加一个定时器. 每隔几秒就调用一下 用户分配 的方法.
这个方法里 遍历所有客服对象. 检查当前客服服务的用户数量, 如果不满 10个 就从用户列表里取出一个加上.(这里可以增加一些判断, 比如, 记录一下最少的客服服务用户的数量, 如果后面的客服有超过这个数量, 就不分配给他新用户, 而是等到下次调用这个方法的时候分配给服务用户少的客服.. 大概是这个意思, 这样实现你的平均分配. ps: 你也可以每次调用这个方法完最后给客服按照服务数量排序. 这个方法是分配的核心代码.)
集合的选用, 选择有序的就行, 不管是否同步, 不同步的话,自己在外部加锁就可以了, 并没有什么大的消耗.
另一种方案是.. 每个客服处理完之后自己去队列里要用户, 但是那个方案不太好控制平均分配,写出来的代码会比较怪, 客服不仅要去要用户, 还要去看别的客服处理的用户数量来判断自己要多少用户... 很怪异.. 所以这个方案我倒是还没想到怎么弄...