MongoDB更新失败怎么办,如何才能减少失败

Admin 2022-05-27 群英技术资讯 552 次浏览

这篇文章主要讲解了“MongoDB更新失败怎么办,如何才能减少失败”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MongoDB更新失败怎么办,如何才能减少失败”吧!

现象:

WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS");

获取res.getN()返回值时,发现偶尔情况下该返回值为0,表示该更新操作没有更新到任何数据。并且如果是多线程并发更新,失败几率大大提高。

官网表示不能保证更新操作的成功性....

方案:

一次失败后,另起线程多次重试。

 private ThreadPoolExecutor exec = new ThreadPoolExecutor(2, 10, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), new ThreadPoolExecutor.CallerRunsPolicy());
主要代码: 
WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS");
            //如果更新失败,进入其他线程重试更新
            if (res.getN() == 0) {
                exec.execute(new Runnable() {
                    @Override
                    public void run() {
                        int num = 0;
                        WriteResult res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS");
                        while (res.getN() == 0 && num < 100) {
                            res = mongoTemplate.updateFirst(query, updateObj, "ServerToAgentReq_SMS");
                            num++;
                            try {
                                Thread.sleep(300);
                            } catch (InterruptedException e) {
                                logger.error("响应更新失败{}", e);
                            }
                        }
                        if (res.getN() == 0) {
                            logger.error("响应更新失败!!!gwMsgId:{},masMsgId:{}", gwMsgId, masMsgId);
                        }
                    }
                });

如此失败率,大大减少。


这篇关于“MongoDB更新失败怎么办,如何才能减少失败”的文章就介绍到这了,更多相关的内容,欢迎关注群英网络,小编将为大家输出更多高质量的实用文章! 群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服