一、项目背景
初衷
最近接到一个紧急临时需求,需求描述:写个单脚本,从redis队列取数据,按照队列数据内容,发起一个post请求。从接到需求到完成交付,用时1小时。
二、代码实现
文件命名:index.php
// 单脚本,从redis队列取数据,按照队列数据内容,发起一个post请求
<?php
$redisConf = [
'host' => '127.0.0.1',
'port' => 6379
];
$redisKey = 'laravel_database_ydqy_order_2';
// 创建Redis实例
$redis = new Redis();
$redis->connect($redisConf['host'], $redisConf['port']);
// 获取元素
$redisData = $redis->lPop($redisKey);
$data = json_decode($redisData, true);
if ($data){
$postdata = $data['data'];
$url = $data['url'];
$result = post($url,$postdata);
postlog(date('Y-m-d H:i:s').':'.$result);
}
function post($url,$param){
$data = $param;
$data = json_encode($data, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, 0);
$headers = array('Content-Type:application/json; charset=utf-8');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function postlog($e) {
file_put_contents("log/postlog.log", var_export($e, true) . "\r\n", FILE_APPEND);
}
脚本执行命令
// 脚本命令
cd /xxx/api/resources/script && php index.php
小结
这里,redis取出数据后直接删除,不再处理,故使用lPop()方法。