关于消息队列解决并发插入的问题

发布于 2022-09-03 08:17:53 字数 395 浏览 13 评论 0

现在有个同意用户申请加队的操作,每个用户只能存在与一个队伍,在用户加入队伍的时候会判断用户是否已经有队伍信息,如果有就不能再次加队。用户A可以同时发送多个申请加入队伍的请求,例如发给队伍:T1,T2,T3. 有可能T1,T2,T3同时同意了同一个用户的请求,虽然这个操作是事务的但是还是会出现这个用户同时加入了T1,T2,T3的情况。因为他们同时判断用户有没有队伍信息,结果发现都没有所以都插入(从性能角度出发不考虑多列字段的唯一键约束,表级锁)。 如果用了消息队列话可以解决这个问题,但是同时有个问题是怎么保证T1用户点击“同意”后及时告诉用户是否成功(我理解的是接入端只是把请求放到消息队列里让消费端处理,这时消费端处理完请求后生产端是得不到通知的)

还有一个问题,如果像这类的处理以每秒10个数量插入到队列里但是消费断每秒只能处理5个。这种情况怎么办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

川水往事 2022-09-10 08:17:54

可以采用redis的list存放用户并发请求,由于list的特性,一来可以保证用户只会加入某一队伍;二来list可以充当缓存队列作用,可以缓冲消费端与生产端性能差异的情况

甜是你 2022-09-10 08:17:53

利用RPC可以解决队列的实时性问题,但是此方案要慎用,由于入队时会阻塞等待队列给出处理结果,处理不当,会使连接池达到最大,造成系统错误。
一般使用队列,就会抛弃实时性,可在业务设计上规避实时性的要求。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文