首页 > 关于队列重复?的一个问题 | Laravel China 社区

重複資料統計,关于队列重复?的一个问题 | Laravel China 社区

互联网 2021-04-12 13:57:17

你这个问题比较简单,但是可以引申出一个相对复杂的问题。先来说说你提出的问题,同一个用户只能操作一次红包,那么只要保证队列是按顺序执行的即可,简单的来说就是单线程执行或者加锁(分布式系统里如何保证单线程以及如何正确的加锁也是一个复杂的问题,这里不再讨论),同一类型(为什么?请自己思考。)的消息第一个没有处理完毕的时候第二个一定不会被处理,那么等第二个请求进来的时候,去数据库里查一下之前是否有执行过就可以了。

再来说说@leochien 提到的问题,什么情况下会使用队列,我的理解是只要是时间过长的任务都要放到队列里执行。如果不放到队列里执行会出现什么问题呢,我们来考虑以下情况:

用户发起请求->微服务A->微服务B->微服务C->外部支付系统(时间较长)

那么如果使用同步调用。首先用户体验极差,点了按钮 1 秒钟没反应,我就有关掉的想法了。其次在系统中会维持着大量的网络连接,增加了系统的开销,其中任何一个连接的断开都会使得当前服务调用出现问题,依然会出现账目问题,处理的时间越长,越会增加这种错误的出现。例如:微服务C已经处理完毕,并且成功提交了事物,此时微服务A判断微服务B处理时间过长,自动断掉了连接,然后回滚了自己得事物,那么后面你需要处理的事情复杂度可想而知。

对于有关钱的操作,无论是什么系统,都要进行定期的主动对账,这样就解决了用户付款了没有收到或者重复付款等问题。

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读