介绍(已不再维护,建议使用HZERO 微服务应用开发平台->服务选配功能进行创建)
本文介绍基于 Shell 脚本交互式快速创建项目,本质是基于 maven 骨架生成项目。 目前支持三种模式:
- 创建新服务:创建一个新的服务,并生成DDD模板代码,可用于快速创建DDD模板项目
- 依赖服务创建:依赖某个服务创建,并生成DDD模板代码
- 批量创建HZERO服务:可快速批量创建HZERO服务,不会生成DDD模板代码
准备工作
-
首先,请下载maven骨架目录文件,并存放到maven仓库根目录
~/.m2/repository/
下:archetype-catalog.xml -
接着,请下载Shell脚本:HZERO创建项目脚本
-
如果是 Mac,需安装
gnu-sed
,并设置环境变量安装软件: brew install gnu-sed coreutils 设置环境变量: export MANPATH="/usr/local/opt/gnu-sed/libexec/gnuman:/usr/local/opt/coreutils/libexec/gnuman:$MANPATH" export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:/usr/local/opt/coreutils/libexec/gnubin:$PATH"
创建新服务
-
运行脚本,选择创建服务模式,默认为第一个,即
创建新服务
,接着跟着提示的步骤即可一步步完成项目的创建。生成的项目基本不需任何手动处理即可启动测试。 -
首先需要输入依赖HZERO服务的版本,默认为当前最新版本。
-
输入创建服务的服务前缀,一般为产品的编码,如 hzero、hcbm、hippius、hwms 等
-
输入创建服务的服务后缀,为服务简称,如 order、iam、mdm、oauth 等
-
接着输入 maven 的坐标,默认以服务前缀和后缀组合,默认版本为 0.1.0-SNAPSHOT
-
输入服务端口,管理端口默认会+1
-
选择数据库类型,默认为 1-MySql,数据库类型不同,使用的驱动、URL不同
-
最后,输入数据库 schema、username、password 即可完成服务创建
-
生成的代码结构
依赖服务创建
-
依赖服务创建选择第二种模式,加载完 maven 骨架后,开始创建服务,过程中的步骤与第一种方式类似。
-
输入依赖的HZERO服务版本
-
输入依赖的服务的 maven 坐标,会自动依赖该服务
-
接着输入创建服务的前缀和后缀
-
输入创建服务的 maven 坐标,默认为前缀和后缀的组合
-
输入服务的端口
-
选择数据库类型
-
输入数据库 schema、username、password
-
生成项目后,还需要手动处理一些配置,对比依赖的 jar 包中的如下类或配置文件,尽量与依赖的服务保持一致
- Application 启动类
- charts/service_name/values.yaml
- resources/application.yml
- resources/bootstrap.yml
批量创建HZERO服务
-
选择第三种模式,批量创建HZERO服务,创建完成的服务基本无需任何手动处理即可启动服务,如果启动失败,可对比配置文件差异。
-
首先选择项目类型,HZERO 服务区分 SaaS 和 OP 版本,选择 SaaS 类型,则依赖 SaaS 版本的服务,OP 类型则依赖 OP 版本的服务
-
输入创建服务的服务前缀,一般为产品的编码,如 hzero、hcbm、hippius、hwms 等
-
输入生成服务的版本号,默认为 0.1.0-SNAPSHOT
-
选择数据库类型
-
输入数据库 schema、username、password
-
最后一步,选择需要依赖创建的HZERO服务编号,编号之间用逗号隔开,默认生成列表中的所有服务,不需要的删除即可
-
每个项目生成完成后,会自动下载服务的配置文件并覆盖,不需要手动处理
-
生成的项目
-
代码结构
服务部署
- 服务部署及数据初始化请参考 服务器本地安装
服务快速启停
- 在基于服务器本地部署的情况下,如需快速启停服务,可参考以下脚本
#!/bin/bash
readonly PRODUCT="hzero"
# 服务列表
readonly SERVICE=(
$PRODUCT-register
$PRODUCT-config
$PRODUCT-gateway
$PRODUCT-gateway-helper
$PRODUCT-oauth
$PRODUCT-swagger
$PRODUCT-iam
$PRODUCT-platform
$PRODUCT-asgard
$PRODUCT-file
$PRODUCT-message
)
# 自定义参数
readonly IP="192.168.***.***"
readonly DATABASE_URL="jdbc:mysql://$IP:3306/{databaseName}?useSSL=false&useUnicode=true&characterEncoding=utf-8"
readonly DATABASE_USERNAME="hzero"
readonly DATABASE_PASSWORD="*****"
readonly REDIS_HOST="$IP"
readonly LOGGING_PATH="log"
readonly LOGGING_LEVEL="info"
readonly WAIT=30
readonly JAVA_OPTS="-Xms512m -Xmx1024m"
readonly API_PORT="8080"
# 环境参数
readonly E1="--EUREKA_DEFAULT_ZONE=http://$IP:8000/eureka"
readonly E2="--SPRING_CLOUD_CONFIG_URI=http://$IP:8010"
readonly E3="--CHOERODON_OAUTH_LOGIN_SUCCESS_URL=http://$IP/workplace"
readonly E4="--HZERO_OAUTH_URL=http://$IP:$API_PORT/oauth/oauth/authorize"
readonly E5="--HZERO_GATEWAY_DOMAIN=$IP:$API_PORT"
# 数据源参数
readonly D1="--SPRING_DATASOURCE_URL=$DATABASE_URL"
readonly D2="--SPRING_DATASOURCE_USERNAME=$DATABASE_USERNAME"
readonly D3="--SPRING_DATASOURCE_PASSWORD=$DATABASE_PASSWORD"
readonly D4="--SPRING_REDIS_HOST=$REDIS_HOST"
# 其他参数
readonly O1="--LOGGING_LEVEL=$LOGGING_LEVEL"
function stopService() {
echo "[$$]stop service : $1"
kill -9 $(jps -ml | grep $1 | awk '{print $1}') > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "[$$]stop success : $1"
else
echo "[$$]stop failed : $1"
fi
}
function startService() {
echo "[$$]start service : $1"
case $1 in
"$PRODUCT-config" | "$PRODUCT-governance" | "$PRODUCT-swagger")
databaseName="hzero_governance"
;;
# 需要启用更多的服务,将服务名称直接追加在后面
"$PRODUCT-asgard" | "$PRODUCT-file" | "$PRODUCT-message")
databaseName="hzero_$(echo $1 | cut -d - -f 2-)"
;;
*)
databaseName="hzero_platform"
;;
esac
startEnv="$E1 $E2 $E3 $E4 $E5 $D1 $D2 $D3 $D4 $O1"
loggingPath="$LOGGING_PATH/$1"
mkdir -p $loggingPath
nohup java $JAVA_OPTS -jar $1.jar ${startEnv//"{databaseName}"/$databaseName} > "$loggingPath/app.log" &
echo "[$$]start success : $1"
}
function restartService() {
stopService $1
startService $1
}
# -----------------------------------------------
# Process options with priority
# -----------------------------------------------
if [[ $1 == '--kill-em-all' ]]; then
jps -ml | grep $PRODUCT | awk '{print $1}' | xargs kill -9
exit $?
fi
if [[ "$#" -gt 0 ]]; then
echo "[$$]Restart : $*"
echo "[$$"
for service in $*
do
restartService $service
echo "[$$]wait $WAIT s to start : $service"
echo "[$$]"
sleep $WAIT
done
else
echo "[$$]Restart : ${SERVICE[*]}"
echo "[$$]"
for service in ${SERVICE[@]}
do
restartService $service
echo "[$$]wait $WAIT s to start : $service"
echo "[$$]"
sleep $WAIT
done
fi
echo "[$$]SUCCESS!"