apollo-sdk/clientd

携程Apollo读取配置接口的完整实现

1.0.0 2021-05-14 09:28 UTC

This package is not auto-updated.

Last update: 2024-09-14 01:34:49 UTC


README

说明

本仓库基于apollo-sdk/config实现了常驻的阿波罗客户端,从指定的阿波罗配置中心实时拉取应用的配置到本地,通过json格式化后缓存在本地目录

特性

  • 支持实时获取Apollo配置变更
  • 支持单进程监听多个应用配置变更

安装(提供两种方式)

第一种:基于git仓库运行

git clone git@github.com:fengzhibin/apollo-configd.git

cd apollo-configd

composer install -vvvo

php ./bin/apollo-clientd.php --help

第二种:基于phar包运行

wget "https://github.com/fengzhibin/apollo-sdk-clientd/releases/download/1.0.0/apollo-clientd.phar"

php apollo-clientd.phar --help

启动(仅支持cli模式)

php ./bin/apollo-clientd.php --server="http://apollo-configserver.demo.com" --conf-portal="demo/test/apollo-clientd"

或者

php apollo-clientd.phar --server="http://apollo-configserver.demo.com" --conf-portal="demo/test/apollo-clientd"

参数说明

cli启动参数

关于--conf-portal参数的说明

--conf-portal参数用于将一些额外的参数(例如应用id,namespace信息等)保存在阿波罗配置中心,这样就不必在apollo-clientd启动时写死,这也减少了apollo-clientd启动参数的个数,程序会在启动时到这配置入口去读取配置,这个参数格式为appid/namespace/key,以下图作为例子说明

Screenshot

上图中的参数为--conf-portal=apollo-sdk-clientd/hello_world/world

额外参数配置(json格式)

{
  "app_namespace_list": {//待监听配置变化的应用及应用下namespace列表配置,必填参数
    "demo1": [//应用id
      "test1",//namespace
      "haha",//namespace
    ],
    "demo2": [],//空数组代表不配置namespace列表,程序会走指定入口读取,参考下面的说明
    "demo3": []
  },
  "save_config_dir": "/data/apollo",//从阿波罗配置中心读取的配置,缓存在这个目录下,必填参数
  "app_namespace_list_portal": "application"//应用下保存namespace列表的入口,可选参数,默认为application
}

如果不在app_namespace_list中配置应用的namespace列表(例如应用demo2和demo3),程序启动时会尝试通过app_namespace_list_portal参数为入口读取namespace列表,格式如下:Screenshot

程序会通过这个namespace读取当前应用下的namespace列表

完整示意图如下(只需要将当前应用下的namespace都配置在入口即可):

Screenshot

业务端读取配置

当业务上需要读取阿波罗配置时,引入apollo-sdk/clientd这个composer包即可,参考以下步骤

composer require apollo-sdk/clientd

代码上引入composer

require 'vendor/autoload.php';

例子:

<?php
require 'vendor/autoload.php';

$key = 'hello';//namespace下的各业务key
$appId = 'demo';//支持通过全局变量或者环境变量赋值,变量名为:APOLLO_SDK_APPID
$namespaceName = 'test';//支持通过全局变量或者环境变量赋值,变量名为:APOLLO_SDK_NAMESPACE_NAME
$saveConfigDir = '/data/apollo';//支持通过全局变量或者环境变量赋值,变量名为:APOLLO_SDK_SAVE_CONFIG_DIR

//1.传统传参方式
var_dump(\ApolloSdk\Helpers\get_config($key, '', $namespaceName, $appId, $saveConfigDir));

//2.常量配置方式(对于单应用id场景比较适用,不需要每个调用都传递重复的应用id参数和保存配置目录参数)
在框架入口处配置常量,例如laravel框架根目录public/index.php里面配置以下的值
defined('APOLLO_SDK_APPID', $appId);
defined('APOLLO_SDK_SAVE_CONFIG_DIR', $saveConfigDir);
//defined('APOLLO_SDK_NAMESPACE_NAME', $namespaceName);

//然后业务代码就可以不需要传递这些已经定义好的常量了
var_dump(\ApolloSdk\Helpers\get_config($key, '', $namespaceName);