feat: 新增 Bash 和 Dart 客户端 SDK 及 demo
- 新增 kenaito-conf-bash-client(Bash 4.0+,依赖 curl、jq)及对应 demo - 新增 kenaito-conf-dart-client(Dart 2.12+,空安全)及对应 demo - 新增 Dockerfile.bash(debian:bookworm-slim)和 Dockerfile.dart(dart:3.5) - README 技术栈和项目结构补充 Bash、Dart 客户端 - README_EN.md 同步更新 - README_DOCKERFILE.md 补充 Bash、Dart 构建命令 - 修复 Bash 客户端 curl 2>&1 混入 stderr 导致响应解析失败 - 修复 Dart 客户端 latest.fetch.timestamp 类型转换兼容 string/num
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
# Kenaito Config Center Bash Client Demo
|
||||
|
||||
# 引入客户端库
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "${SCRIPT_DIR}/../kenaito-conf-bash-client/lib/kenaito_conf.sh"
|
||||
|
||||
# 配置(可通过环境变量覆盖)
|
||||
export KENAITO_BASE_URL="${KENAITO_BASE_URL:-http://localhost:8080}"
|
||||
export KENAITO_APP_NAME="${KENAITO_APP_NAME:-kenaito-bash-demo}"
|
||||
export KENAITO_ENV="${KENAITO_ENV:-daily}"
|
||||
export KENAITO_VERSION="${KENAITO_VERSION:-latest}"
|
||||
export KENAITO_TOKEN="${KENAITO_TOKEN:-}"
|
||||
export KENAITO_SYNC_INTERVAL="${KENAITO_SYNC_INTERVAL:-10}"
|
||||
export KENAITO_CACHE_DIR="${KENAITO_CACHE_DIR:-.}"
|
||||
|
||||
# 本地默认配置
|
||||
declare -A config_values
|
||||
config_values=(
|
||||
["database.host"]="${DATABASE_HOST:-192.168.1.1}"
|
||||
["database.port"]="${DATABASE_PORT:-8888}"
|
||||
["database.name"]="${DATABASE_NAME:-xxxx}"
|
||||
["database.user"]="${DATABASE_USER:-xxxx}"
|
||||
["database.password"]="${DATABASE_PASSWORD:-xxxxxxxx}"
|
||||
)
|
||||
|
||||
# 变更回调函数
|
||||
kenaito_on_change() {
|
||||
local changed_keys="$1"
|
||||
echo "Config changed:"
|
||||
IFS=', ' read -ra keys <<< "$changed_keys"
|
||||
for key in "${keys[@]}"; do
|
||||
local value
|
||||
value=$(kenaito_get "$key")
|
||||
echo " $key = $value"
|
||||
if [ -n "${config_values[$key]+x}" ]; then
|
||||
config_values["$key"]="$value"
|
||||
echo " [updated] $key = $value"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# 启动客户端
|
||||
kenaito_start
|
||||
if [ $? -eq 0 ]; then
|
||||
# 用远程配置覆盖本地默认值
|
||||
for key in "${!config_values[@]}"; do
|
||||
remote_value=$(kenaito_get "$key")
|
||||
if [ -n "$remote_value" ]; then
|
||||
config_values["$key"]="$remote_value"
|
||||
fi
|
||||
done
|
||||
|
||||
# 统计配置数量
|
||||
count=0
|
||||
for key in "${!_KENAITO_CONFIGS[@]}"; do
|
||||
count=$((count + 1))
|
||||
done
|
||||
echo "loaded $count configs from remote"
|
||||
echo ""
|
||||
else
|
||||
echo "Failed to init config client, using local defaults"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 显示当前配置
|
||||
echo "Current configs:"
|
||||
for key in $(echo "${!config_values[@]}" | tr ' ' '\n' | sort); do
|
||||
echo " $key = ${config_values[$key]}"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Listening for config changes... (press Ctrl+C to stop)"
|
||||
|
||||
# 信号处理
|
||||
trap 'echo ""; echo "Shutting down..."; exit 0' INT TERM
|
||||
|
||||
# 同步循环
|
||||
while true; do
|
||||
kenaito_sync_once
|
||||
sleep "$KENAITO_SYNC_INTERVAL"
|
||||
done
|
||||
Reference in New Issue
Block a user