使用队列和事务实现采集数据实例流程
2023-04-18 14:51:38 时间
采集数据实例流程
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;
}
}
复制代码
相关文章
- 移动端网络常见问题及优化对策
- 苏宁蛙测基于Instruments检测iOS性能技术
- iOS自适应cell行高的那点破事儿
- 调研数据:iPhone新机型 用户买账吗?
- 苹果上线了全新的「隐私」网站,这恐怕是你不想关心却不得不关心的事
- 智能手机哪家强?iOS设备故障率整体低于安卓机,三星更容易坏
- “猜画小歌”的一些细节和思考
- 数据大盗:小米与拼多多的电商数据是如何被卖到华尔街的?
- 作为程序员,我的两次印象深刻的傻眼时刻
- iOS中堆和栈的使用方法
- iOS下的图片处理与性能优化
- 大数据“杀熟”新玩法 还是苹果套路深
- MySQL数据库MVCC多版本并发控制简介
- ORACLE GOLDENGATE的主要组件详解
- SQL Server 2008连接数据库引擎的驱动和方式
- 关于SQL Server 2008数据货场的几点介绍
- MyEclipse连接SQL Server 2008数据库的操作方法
- 关于GoldenGate目录的详细解释
- 影响SQL Server数据库访问速度的因素总结及优化方案
- Oracle数据库访谈之最年轻的OCM访谈