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
相关文章
相关标签/搜索