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

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

采集数据实例流程

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;
        }
    }

目录
相关文章
|
3月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
17天前
|
消息中间件 监控 Java
线程池关闭时未完成的任务如何保证数据的一致性?
保证线程池关闭时未完成任务的数据一致性需要综合运用多种方法和机制。通过备份与恢复、事务管理、任务状态记录与恢复、数据同步与协调、错误处理与补偿、监控与预警等手段的结合,以及结合具体业务场景进行分析和制定策略,能够最大程度地确保数据的一致性,保障系统的稳定运行和业务的顺利开展。同时,不断地优化和改进这些方法和机制,也是提高系统性能和可靠性的重要途径。
110 62
|
2月前
|
消息中间件 存储 缓存
如何在无状态函数中实现事务性操作
如何在无状态函数中实现事务性操作
|
4月前
|
SQL Java 数据管理
|
5月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何配置数据过滤规则以确保在同一时间调度执行的数据抽取或同步任务处理的是同一时间范围的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之任务在同步过程中新增同步表后选择全量初始化历史数据,是否会阻塞原先其余表的增量同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之任务在同步过程中新增同步表后选择全量初始化历史数据,是否会阻塞原先其余表的增量同步
|
5月前
|
分布式计算 DataWorks NoSQL
MaxCompute产品使用合集之数据总线同步到DataWorks的任务状态持续显示为HANG(挂起)且同步延迟不断增加,该如何排查
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何确保多并发sink同时更新Redis值时,数据能按事件时间有序地更新并且保持一致性
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 存储 算法
Flink---13、容错机制(检查点(保存、恢复、算法、配置)、状态一致性、端到端精确一次)
Flink---13、容错机制(检查点(保存、恢复、算法、配置)、状态一致性、端到端精确一次)
|
运维 监控 安全
使用日志数据的方式
使用日志数据的方式
67 0