1. 程式人生 > 其它 >php nacos服務註冊與發現

php nacos服務註冊與發現

1 擴充套件安裝

安裝grpc、protobuf

2 Laravel專案安裝

2.1 指定倉庫地址

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

2.2 建立測試專案

composer create-project --prefer-dist laravel/laravel test-service "6.*"

2.3 引入依賴包

composer require alibaba/nacos

2.4 啟動服務

php artisan serve
也可以指定host和埠號
php artisan serve --host 127.0.0.2 --port 8001

3 nacos服務安裝

3.1 選擇版本,進行安裝

本示例使用nacos-server-2.0.3版本

3.1.1 windows安裝

下載地址

https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.zip

3.1.2 類Unix平臺安裝

wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz
tar -xvf nacos-server-$version.tar.gz
cd nacos/bin

3.2 啟動服務

3.2.1 類Unix平臺啟動

啟動命令(standalone代表著單機模式執行,非叢集模式):

sh startup.sh -m standalone

如果使用的是ubuntu系統,或者執行指令碼報錯提示[[符號找不到,可嘗試如下執行:

bash startup.sh -m standalone

3.2.2 Windows平臺啟動

啟動命令(standalone代表著單機模式執行,非叢集模式):

startup.cmd -m standalone

推薦使用下面方式更改startup.cmd檔案,指定單機模式,可以直接雙擊運。

set MODE="standalone"

3.3 nacos服務訪問

http://10.8.0.27:8848/nacos/index.html

初始賬號與密碼:nacos nacos

4 服務註冊、發現

4.1 例項註冊

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test-service&ip=127.0.0.1&port=8081'

通過App\Console\Commands\NacosRegisterInstance.php檔案進行註冊

<?php

namespace App\Console\Commands;

use alibaba\nacos\NacosConfig;
use alibaba\nacos\Naming;
use Illuminate\Console\Command;

class NacosRegisterInstance extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'nacos:register:instance';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'nacos:register:instance';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        try {
            NacosConfig::setHost("http://127.0.0.1:8848/"); // 配置中心地址
            $naming = Naming::init(
                "test-service",
                "127.0.0.1",
                "8081",
                "",
                "",
                true
            );

            $naming->register();
        } catch (\Exception $exception) {

        }
    }
}
PHP

通過php artisan命令執行

php artisan nacos:register:instance

4.2 例項發現

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=test-service'

通過App\Console\Commands\NacosGetInstance.php檔案進行例項發現

<?phpnamespace App\Console\Commands;use alibaba\nacos\NacosConfig;use alibaba\nacos\Naming;use alibaba\nacos\NamingClient;use Illuminate\Console\Command;class NacosGetInstance extends Command{    /**     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'nacos:get:instance';    /**     * The console command description.     *     * @var string     */    protected $description = 'nacos:get:instance';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        try {            NacosConfig::setHost("http://127.0.0.1:8848/"); // 配置中心地址            $naming = Naming::init(                "test-service",                "",                "",                "",                "",                true            );            $instances = $naming->listInstances(true);            if ($instances->getHosts()) {                $hosts = [];                foreach ($instances->getHosts() as $v) {                    $hosts[] = $v->getIp() . ":" . $v->getPort();                }                var_dump($hosts);            } else {                throw  new \Exception("未發現例項");            }        } catch (\Exception $exception) {        }    }}
PHP

通過php artisan命令執行

php artisan nacos:get:instance

4.3 登出例項

curl -X DELETE 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test-service&ip=127.0.0.1&port=8081'

通過App\Console\Commands\NacosDeleteInstance.php檔案進行例項發現

<?phpnamespace App\Console\Commands;use alibaba\nacos\NacosConfig;use alibaba\nacos\Naming;use alibaba\nacos\NamingClient;use alibaba\nacos\NamingConfig;use Illuminate\Console\Command;class NacosDeleteInstance extends Command{    /**     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'nacos:delete:instance';    /**     * The console command description.     *     * @var string     */    protected $description = 'nacos:delete:instance';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        try {            NacosConfig::setHost("http://127.0.0.1:8848/"); // 配置中心地址            $naming = Naming::init(                "test-service",                "127.0.0.1",                "8081",                "",                "",                true            );            $response = $naming->delete();        } catch (\Exception $exception) {        }    }}
PHP

4.3 修改例項

curl -X PUT '127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test-service&ip=127.0.0.1&port=8081&clusterName=TEST1&weight=8&metadata={}'

通過App\Console\Commands\NacosUpdateInstance.php檔案進行例項發現

<?phpnamespace App\Console\Commands;use alibaba\nacos\NacosConfig;use alibaba\nacos\Naming;use alibaba\nacos\NamingClient;use alibaba\nacos\NamingConfig;use Illuminate\Console\Command;class NacosUpdateInstance extends Command{    /**     * The name and signature of the console command.     *     * @var string     */    protected $signature = 'nacos:update:instance';    /**     * The console command description.     *     * @var string     */    protected $description = 'nacos:update:instance';    /**     * Create a new command instance.     *     * @return void     */    public function __construct()    {        parent::__construct();    }    /**     * Execute the console command.     *     * @return mixed     */    public function handle()    {        try {            NacosConfig::setHost("http://127.0.0.1:8848/"); // 配置中心地址            $naming = Naming::init(                "test-service",                "127.0.0.1",                "8081",                "",                "0",                true            );            $naming->update();        } catch (\Exception $exception) {        }    }}
PHP

5 關閉伺服器

5.1 Linux/Unix/Mac

sh shutdown.sh

5.2 Windows

shutdown.cmd

或者雙擊shutdown.cmd執行檔案。