diff --git a/backend/bin/rabbitmq.sh b/backend/bin/rabbitmq.sh index 7bc47e0..98aebbb 100755 --- a/backend/bin/rabbitmq.sh +++ b/backend/bin/rabbitmq.sh @@ -18,7 +18,7 @@ RABBITMQ_HOST="127.0.0.1" RABBITMQ_PORT="15672" RABBITMQ_USER="admin" RABBITMQ_PASS="admin" -VHOST="dataflow" +VHOST="datahub" # 数据类型列表 DATA_TYPES=("orders" "products" "refunds" "inventory") @@ -34,7 +34,8 @@ NC='\033[0m' # No Color # 帮助信息 # ============================================================================ show_help() { - cat << EOF + # 使用 printf '%b' 解释 ANSI 转义序列 + printf '%b\n' "$(cat << EOF ${BLUE}RabbitMQ 配置管理脚本${NC} ${YELLOW}用法:${NC} @@ -61,6 +62,11 @@ ${YELLOW}命令:${NC} ${GREEN}list${NC} 列出当前 MQ 中已配置的平台 + ${GREEN}reset-password${NC} 重置指定用户的密码 + --user 用户名称 (consumer/ops/平台名) + 示例: $0 reset-password --user consumer + 示例: $0 reset-password --user tmall + ${GREEN}--help, -h${NC} 显示此帮助信息 ${YELLOW}配置文件:${NC} @@ -85,6 +91,7 @@ ${YELLOW}示例:${NC} $0 list # 列出已配置的平台 EOF +)" } # ============================================================================ @@ -559,13 +566,13 @@ create_system_users() { echo "创建系统用户..." echo "========================================" - # 创建 dataflow 消费者用户 + # 创建 datahub 消费者用户 rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \ - declare user --name "user_dataflow_consumer" --password "$consumer_password" --tags "" - info "创建用户: user_dataflow_consumer" + declare user --name "user_datahub_consumer" --password "$consumer_password" --tags "" + info "创建用户: user_datahub_consumer" rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \ - declare permissions --vhost "$VHOST" --user "user_dataflow_consumer" \ + declare permissions --vhost "$VHOST" --user "user_datahub_consumer" \ --configure "^(main\\.exchange|errors\\.exchange|dlx\\..*)|(.*\\.queue)$" \ --write "^(orders|products|refunds|inventory).*\\.queue$|(dlx\\..*)|(errors\\.exchange)|(.*\\.errors\\.exchange)$" \ --read "^(main\\.exchange|(orders|products|refunds|inventory).*\\.queue|dlx\\..*)$" @@ -777,6 +784,81 @@ cmd_remove() { echo "已从 .env 移除: MQ_PASSWORD_${platform_upper}" } +# reset-password 命令:重置用户密码 +cmd_reset_password() { + local user_name="" + + # 解析参数 + while [[ $# -gt 0 ]]; do + case "$1" in + --user) + user_name="$2" + shift 2 + ;; + *) + error "未知参数: $1\n用法: $0 reset-password --user " + ;; + esac + done + + if [[ -z "$user_name" ]]; then + error "请指定用户名称\n用法: $0 reset-password --user \n示例: $0 reset-password --user consumer" + fi + + # 标准化用户名称 + local normalized_name=$(normalize_platform_name "$user_name") + local new_password=$(generate_password) + + echo -e "${BLUE}========================================" + echo "重置用户密码: $normalized_name" + echo "========================================${NC}" + + # 判断用户类型并处理 + case "$normalized_name" in + consumer) + local mq_user="user_datahub_consumer" + local env_key="CONSUMER" + ;; + ops) + local mq_user="user_ops" + local env_key="OPS" + ;; + *) + # 平台用户 + local mq_user="user_${normalized_name}" + local env_key=$(echo "$normalized_name" | tr '[:lower:]' '[:upper:]') + ;; + esac + + # 检查用户是否存在 + local user_exists=$(rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \ + list users name -f tsv 2>/dev/null | grep -w "^${mq_user}$" || true) + + if [[ -z "$user_exists" ]]; then + error "用户 '$mq_user' 不存在" + fi + + # 更新 RabbitMQ 用户密码 + echo "" + rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \ + declare user --name "$mq_user" --password "$new_password" --tags "" + info "RabbitMQ 用户密码已更新: $mq_user" + + # 更新 .env 文件 + add_password_to_env "$env_key" "$new_password" + info "密码已写入 .env: MQ_PASSWORD_${env_key}" + + echo "" + echo -e "${GREEN}========================================" + echo "密码重置成功!" + echo "========================================${NC}" + echo "" + echo "用户: $mq_user" + echo "新密码已保存到 .env: MQ_PASSWORD_${env_key}" + echo "" + echo -e "${YELLOW}注意: 请确保相关服务使用新密码重新连接${NC}" +} + # list 命令:列出已配置的平台 cmd_list() { echo -e "${BLUE}========================================" @@ -844,6 +926,10 @@ main() { list) cmd_list ;; + reset-password) + shift + cmd_reset_password "$@" + ;; --help|-h|help|"") show_help ;;