废话不说,直接上代码
<?php
/**
* Created by PhpStorm.
* User: dehua
* Date: 2019/3/1
* Time: 14:17
*/
return [
'server' => 'http://10.208.204.46:8161',
'query' => [
'app_id' => 'wuc',
'cluster' => 'default',
'namespace' => 'application',
]
];
守护进程
namespace App\Console\Commands\Apollo;
use GuzzleHttp\Client;
use Illuminate\Console\Command;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Storage;
class SyncCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'ue:apollo:sync';
/**
* The console command description.
*
* @var string
*/
protected $description = '阿波罗同步';
protected $config = [];
protected $url;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->url = config('apollo.server') . '/configs/' . implode('/', array_values(config('apollo.query')));
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->doSync();
}
protected function doSync()
{
$client = new Client(['timeout' => 2.00]);
try {
$response = $client->request('GET', $this->url);
$body = json_decode($response->getBody()->getContents(), true);
$cfg = Arr::get($body, 'configurations', []);
if (!$cfg) {
return true;
}
$cfg = array_map(function ($value) {
if ($row = json_decode($value, true)) {
return $row;
}
return $value;
}, $cfg);
$items = [];
foreach ($cfg as $key => $value) {
data_set($items, $key, $value);
}
foreach ($items as $k => $item) {
$this->line('Saving ['.$k.']');
$this->save($k, $item);
}
} catch (\Exception $ex) {
$this->error($ex->getMessage());
}
}
protected function save($fileName, $item)
{
if(config('apollo.sync.redis', false)){
cache()->tags('apollo')->forever($fileName, $item);
$this->line('Saving To Redis '.$fileName);
}
if(config('apollo.sync.file', false)){
$this->line('Saving To File '.$fileName);
$fileName = 'apollo/' . $fileName . '.php';
ksort($item);
$content = implode("\r\n", [
"<?php",
"return",
var_export($item, true) . ';'
]);
Storage::disk('config')->put($fileName, $content);
}
$this->line('==================');
}
}