consul php sdk,laravel接入Consul

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 = [

"<?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());

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值