美文网首页
记一次thinkphp-swoole查不到数据的bug

记一次thinkphp-swoole查不到数据的bug

作者: 翊痕 | 来源:发表于2020-12-06 22:56 被阅读0次

    场景是这样的:

    在添加完数据后,给swoole进程发送一个消息,在swoole的task进程中去处理这条数据。

    但是出现了一个奇怪的问题,就是时不时swoole处理数据会失败,打断点,发现swoole中查不到这条数据,但是去数据库一看,这条数据明明已经插入了,但是为什么会查不到数据呢?

    原来 我在thinkphp代码中插入数据时,启用了事务,发送消息的代码写在了提交事务之前,

    Db::startTrans();

    try {

        step1 插入数据代码;

        step2 发送swoole消息代码

        Db::commit();

    } catch (Exception $e) {

        Db::rollback();

        Log::error($e->getMessage());

        Log::error($e->getTraceAsString());

        return $this->error();

    }

    因为swoole是单独进程,如果swoole进程在获取这条数据时,数据还未提交,那么在swoole进程是获取不到这条数据的。所有将代码顺序调整一下即可,在事务提交后再发送消息即可。

    Db::startTrans();

    try {

        step1 插入数据代码;

        Db::commit();

        step2 发送swoole消息代码

    } catch (Exception $e) {

        Db::rollback();

        Log::error($e->getMessage());

        Log::error($e->getTraceAsString());

        return $this->error();

    }

    相关文章

      网友评论

          本文标题:记一次thinkphp-swoole查不到数据的bug

          本文链接:https://www.haomeiwen.com/subject/fkwawktx.html