使用队列和事务实现采集数据实例流程

简介: 使用队列和事务实现采集数据实例流程

采集数据实例流程

1,加入队列消费queuePlayer($array)具体业务方法

2,业务方法说明:使用事务,处理采集数据,处理业务逻辑,

3,日志添加

补充,队列使用可以查看上一篇文章 my.oschina.net/owenzhang24…

private $user = '';
    private $secret = '';
    private $url = 'open.baiduapi.com/api/football/';
    /*
     * @array 传入过来一个球队信息的数组
     * @return bool 成功返回true ,失败返回false
     */
    public function __construct()
    {
        $this->user = Env::get('nami.user');
        $this->secret = Env::get('nami.secret');
    }
/*
     * 球员队列消费
     */
    public function queuePlayer($array)
    {
        if (empty($array)) {
            Log::error('球员数据不能为空:' . json_encode($array, JSON_UNESCAPED_UNICODE));
            return false;
        }
        $http = new Http();
        $playerRequest = $http->doGet($this->url . "?user=$this->user");
        $playerData = json_decode($playerRequest, true);
        if (empty($playerData)) {
            Log::error("球员ID:{$array['id']}.信息异常,接口返回" . json_encode($playerRequest, JSON_UNESCAPED_UNICODE));
            return false;
        }
//走事务
        Db::startTrans();
        try {
            $playerInfo = $model->getPlayerInfo($array['id']);
            if (empty($playerInfo)) {
                //球员基本信息,添加
                $data = [
                    'nami_player_id' => $array['id'],
                    'nami_team_id' => $playerData['team_id'],
                ];
                $model->InsertPlayerAll($data);
            } else {
                //更新数据--球员的基本信息
                $data = [
                    'nami_team_id' => $playerData['team_id'],
                    'name' => $playerData['name_zh'],
                ];
                $model->UpdatePlayer($array['id'], $data);
            }
            //事务提交
            Db::commit();
            return true;
        } catch (Exception $e) {
//错误日志提交
            $error = json_encode([
                'msg' => $e->getMessage(),
                'line' => $e->getLine(),
            ], JSON_UNESCAPED_UNICODE);
            Log::error("球员ID.{$array['id']}.采集错误!" . $error);
//回滚事务
            Db::rollback();
            return false;
        }
    }

目录
相关文章
|
6月前
|
消息中间件 存储 算法
Flink---13、容错机制(检查点(保存、恢复、算法、配置)、状态一致性、端到端精确一次)
Flink---13、容错机制(检查点(保存、恢复、算法、配置)、状态一致性、端到端精确一次)
|
7月前
|
消息中间件 Java 专有云
RocketMQ控制台消费者堆栈信息展示优化分析
RocketMQ控制台消费者堆栈信息展示优化分析
248 3
|
7月前
|
运维 监控 安全
使用日志数据的方式
使用日志数据的方式
45 0
|
9月前
|
NoSQL 关系型数据库 MySQL
业务让我实现一个排队导出功能
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队;
|
9月前
|
数据处理 Go
让消费数据处理更快版本2(有并发控制)-一次性并发获取或者初始化任务最快有效方式
让消费数据处理更快版本2(有并发控制)-一次性并发获取或者初始化任务最快有效方式
|
消息中间件
消息队列:第四章:延迟检查队列
消息队列:第四章:延迟检查队列
126 0
消息队列:第四章:延迟检查队列
|
算法 编译器 调度
程序并发操作中,解决数据同步的四种方法
程序并发操作中,解决数据同步的四种方法
138 0
程序并发操作中,解决数据同步的四种方法
|
调度
任务同步管理的方法
任务同步管理的方法
75 0
|
消息中间件 RocketMQ 开发者
事务消息的流程分析|学习笔记
快速学习事务消息的流程分析
85 0
事务消息的流程分析|学习笔记
|
存储 算法 Java
Flink状态管理与Checkpoint实战——模拟电商订单计算过程中宕机的场景,探索宕机恢复时如何精准继续计算订单(上)
Flink状态管理与Checkpoint实战——模拟电商订单计算过程中宕机的场景,探索宕机恢复时如何精准继续计算订单
464 0
Flink状态管理与Checkpoint实战——模拟电商订单计算过程中宕机的场景,探索宕机恢复时如何精准继续计算订单(上)