美文网首页
记一次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

    场景是这样的: 在添加完数据后,给swoole进程发送一个消息,在swoole的task进程中去处理这条数据。 但...

  • 记一次elasticsearch索引数据后但查不到

    背景:需要在一堆日志中统计所有存在的源IP,日志时按天存放的,代码结构如下: 各位看官觉得有问题吗?好吧,貌似没有...

  • 05. getWriter()has already been

    记一次bug fixed: getWriter()has already been called for this...

  • iOS Bug

    Refresh Bug : Bug: 添加完数据后一次刷新table,引发多次footRefresh for ba...

  • 缓存穿透、击穿、雪崩

    redis常见的问题及解决方案:1、缓存穿透:缓存中查不到数据,数据库中也查不到。解决方案: 1》对查询条件的参数...

  • Mybatis查不到数据

    最近在写代码的过程中发现这么一个问题:使用mybatis查询数据库是涉及到中文的时候查询不到结果(如下图所示),但...

  • 记一次BUG

    一、如何快速的给大量轨迹点打上区划代码?1、高德爬取街道中心点,行政区划中心点和边界。2、精度要求较高的,将边界加...

  • 记一次bug

    错误细节,用户名无法拖动,其他的栏都可以对应的长短拖动(表头和表格内容一起动) 代码: 错误原因,在第一栏这个fi...

  • 记一次BUG

    这里审核出错 后台写的: 出错原因,这里判断也examine_status ==1,这里不行,这成Boolean了...

  • 异步组件懒加载 获取不到ref

    关键字:获取不到ref,异步组件,$refs记一次异步组件导致的bug 目前这个bug只在打包环境出现,本地环境不...

网友评论

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

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