乐趣区

laravel接入Consul

配置文件:

return [
‘url’ => ‘http://127.0.0.1:8500/v1/kv/’,
];

命令行:

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

$content = [
“<?php”,
“return”,
var_export($item, true) . ‘;’
];

try {
\Storage::disk(‘config’)->put($path . ‘.php’, implode(“\r\n”, $content));
$this->line($path . ‘ : Write Success.’);
} catch (\Exception $ex) {
$this->error($path .’ : ‘ .$ex->getMessage());
}

}
}
}

退出移动版