config/consul.php
return [ 'url' => 'http://127.0.0.1:8500/v1/kv/',];
filesystems.php
'config' => [ 'driver' => 'local', 'root' => base_path('config'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
命令行:
namespace App\Console\Commands\Consul;use GuzzleHttp\Client;use Illuminate\Console\Command;class DeamonCommand extends Command{ /** * The name and signature of the console command. * * @var string */ protected $signature = 'ue:consul:deamon { path : 路径 } '; protected $items = []; /** * The console command description. * * @var string */ protected $description = 'consul 守护进程'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } public function handle() { $path = trim($this->argument('path'), '/'); $url = rtrim(config('consul.url'), '/') . '/' . $path . '/?recurse'; $client = new Client(); try { $response = $client->request('GET', $url); $rows = json_decode($response->getBody()->getContents(), true); if (count($rows) == 1) { return true; } $name = null; foreach ($rows as $key => $row) { if (substr($row['Key'], -1) == '/') { $name = substr($row['Key'], 0, -1); $this->items[$name] = []; continue; } $key = trim(str_replace($name, ' ', $row['Key']), ' /'); $this->items[$name][$key] = base64_decode($row['Value']); } $this->doSave(); } catch (\Exception $ex) { $this->error($ex->getMessage()); return true; } } protected function doSave() { foreach ($this->items as $path => $item) { if (!$item) { $this->error($path .' : Is Empty.'); continue; } $item = array_map(function($row){ if(json_decode($row)){ return json_decode($row, true); } return $row; }, $item); $content = [ " put($path . '.php', implode("\r\n", $content)); $this->line($path . ' : Write Success.'); } catch (\Exception $ex) { $this->error($path .' : ' .$ex->getMessage()); } } }}