Files
kenaito-conf/kenaito-conf-bash-client-demo/app.sh
T
odboy 5f67274e3f 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
2026-08-19 21:11:28 +08:00

83 lines
2.3 KiB
Bash

#!/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