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 = [
                "put($path . '.php', implode("\r\n", $content));
                $this->line($path . ' : Write Success.');
            } catch (\Exception $ex) {
                $this->error($path .' : ' .$ex->getMessage());
            }

        }
    }
}

你可能感兴趣的:(laravel接入Consul)