• 技术文章 >数据库 >MongoDB

    mongodb 更新失败

     Ly Ly2020-06-08 17:06:43原创3669

    现象:

    1

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

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

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

    方案:

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    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
    上一篇:mongodb 安装怎么好久 下一篇:mongodb 启动与连接失败

    相关文章推荐

    • mac环境中mongodb启动失败• linux下MongoDB的使用教程• mongodb php.ini 在哪?• mongodb 安装怎么好久

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网