php微服務,在laravel中集成nacos配置中心

php微服務的資料一直比java少,不過java微服務的一些組件php也是能夠複用的,就拿配置中心這個組件舉例,來看看在php裏如何使用😀php

配置中心做爲微服務不可缺乏的關鍵組建,下面就在laravel中集成配置中心nacosjava

nacos是由阿里巴巴開發的微服務配置中心,參考:nacosmysql

下面用到了由做者寫的php的nacos客戶端php-nacos: github.com/neatlife/ph… 歡迎star,歡迎pr(求star, 求star, 求star)linux

啓動nacos配置中心

可使用docker啓動laravel

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker

docker-compose -f example/standalone-derby.yaml up
複製代碼

而後打開 本機ip:8848端口查看效果,nacos默認的登陸用戶名密碼都是 nacos git

而後點擊+號,新建配置,把laravel的.env文件內容複製進去,dataid通常是應用的名稱,通常能夠填應用名稱,獲取配置的時候會用到這個參數 github

先刪掉項目裏的.env文件,後面從配置中心獲取配置,刪掉後查看效果 sql

項目報500了,這個是預期內的效果

下載php-nacos客戶端

可使用composer一鍵下載:docker

composer require alibaba/nacos
複製代碼

將nacos配置中心的配置寫入環境變量

編輯 /etc/environment 文件,核心內容以下shell

LARAVEL_NACOS_HOST=你的nacos配置中心地址和端口,好比http://127.0.0.1:8848
LARAVEL_ENV=app運行的環境,好比: dev, local等
LARAVEL_NACOS_DATAID=配置的dataid
LARAVEL_NACOS_GROUPID=配置的groupid
複製代碼

將環境變量傳遞給php-fpm

修改文件:/usr/lib/systemd/system/php-fpm.service 在[Service]節下添加:EnvironmentFile=/etc/environment

修改php-fpm配置文件,好比:/usr/local/php/etc/php-fpm.conf 在[www]節下添加:clear_env = no

而後從新加載php-fpm服務,命令以下:

systemctl daemon-reload
systemctl stop php-fpm
systemctl start php-fpm
複製代碼

使用nacos配置中心的配置替代laravel的.env文件

在laravel項目裏把.env文件刪掉,而後修改bootstrap/app.php文件,在文件開頭添加獲取nacos配置中心配置文件的代碼,核心代碼以下

\alibaba\nacos\NacosConfig::setSnapshotPath(dirname(__DIR__) . "/nacos/config");
(new \Dotenv\Loader([], new \Dotenv\Environment\DotenvFactory(), true))->loadDirect(
    \alibaba\nacos\failover\LocalConfigInfoProcessor::getSnapshot(
        getenv("LARAVEL_ENV"),
        getenv("LARAVEL_NACOS_DATAID"),
        getenv("LARAVEL_NACOS_GROUPID"),
        getenv("LARAVEL_NACOS_NAMESPACEID") ? : "", 
    )
);
複製代碼

完整代碼參考app.php

定時獲取最新的配置

在laravel裏建立一個命令: artisan make:command NacosRefreshConfig 而後編輯剛剛建立的文件,在命令執行體裏獲取配置文件,核心代碼以下:

// load nacos config file
(new \Dotenv\Loader([], new \Dotenv\Environment\DotenvFactory(), true))->loadDirect(
    \alibaba\nacos\Nacos::init(
        getenv("LARAVEL_NACOS_HOST"),
        getenv("LARAVEL_ENV"),
        getenv("LARAVEL_NACOS_DATAID"),
        getenv("LARAVEL_NACOS_GROUPID"),
        getenv("LARAVEL_NACOS_NAMESPACEID") ? : "",
    )->runOnce()
);
複製代碼

完整代碼參考NacosRefreshConfig.php

建立一個linux的cron執行上面的命令,好比每分鐘的第一秒獲取配置文件 1 */1 * * * php path/to/artisan nacos:refresh

爲了能夠立刻看到效果,能夠手動執行下這個命令

php artisan nacos:refresh
複製代碼

這個定時任務執行後,項目須要的配置文件就被拉取到 nacos目錄了,打開瀏覽器查看效果

能夠看到項目已經成功獲取到配置文件並開始正常運行了

一些注意的點

微服務除了配置中心,另外很是重要的還有熔斷降級和鏈路追蹤

熔斷降級可使用istio來作,參考istio的熔斷

鏈路追蹤可使用SkyWalking或者pinpoint來作,固然也可使用istio也提供的鏈路追蹤功能,參考:分佈式追蹤

可使用nacos和mysql集成的docker保存配置,參考:standalone-mysql.yaml

能夠將laravel應用打成docker鏡像在kubernetes上運行,搭建kubernetes集羣能夠參考做者寫的另外一篇博客:安裝k8s集羣

完整案例代碼已上傳github:github.com/neatlife/la…

若是對微服務開發感興趣,可加做者微信探討,也可在github提pr,issue等

wx
相關文章
相關標籤/搜索