Dubbo+Zookeeper架构—高级篇21-支付系统简易版的部署

支付系统架构

一、 工程结构 

pay-common-parent  项目的 Maven 父配置工程 
pay-common   公共工程,所有项目均可引用 
pay-common-config  公共配置工程 
pay-common-core  公共核心工程,service 工程共用 
pay-common-web  公共 web 工程,web 工程共用 
 
pay-api-merchant  商户 API 工程,商户对接支付平台时使用(如:模拟商城 pay-web-shop) 
 
pay-facade-account  账户服务接口 
pay-facade-bank  银行管理服务接口 
pay-facade-banklink 银行后置服务接口 
pay-facade-boss  运营服务接口 
pay-facade-cost  成本计算服务接口 
pay-facade-fee  商户计费服务接口 
pay-facade-limit  交易限制服务接口 
pay-facade-notify  通知服务接口 
pay-facade-payrule  支付规则服务接口 
pay-facade-remit  打款服务接口 
pay-facade-report  报表服务接口 
pay-facade-settlement 结算服务接口 
pay-facade-trade  交易服务接口 
pay-facade-user  用户服务接口 

pay-service-account 账户服务 
pay-service-bank  银行管理服务 
pay-service-banklink 银行后置服务 
pay-service-boss  运营服务 
pay-service-cost  成本计算服务 
pay-service-fee  商户计费服务 
pay-service-limit  交易限制服务 
pay-service-notify  通知服务 
pay-service-payrule 支付规则服务 
pay-service-remit  打款服务 
pay-service-report  报表服务 
pay-service-settlement 结算服务 
pay-service-trade  交易服务 
pay-service-user  用户服务 
 
pay-app-queue-notify 消息队列监听 APP 
 
pay-timer-report  报表分析定时任务 
 
pay-web-bank-receive 银行回调请求信息接收 
pay-web-boss   运营管理系统 
pay-web-gateway  支付网关 
pay-web-notify-receive 通知消息接收 
pay-web-portal  门户系统 
pay-web-trade   交易接口 
 
pay-web-shop   模拟商城 

一、前期准备 

     1、MySQL 数据库的安装:MySQL-5.6.22,自行安装 
     2、ZooKeeper 注册中心安装 
     3、Dubbo 管理控制台的安装 
     4、Dubbo 监控中心的介绍与简易监控中心的安装 
     5、持续集成管理平台Jenkins安装
     6、ActiveMQ 的安装与使用 
     7、Redis 的安装与使用 
     8、FastDFS 分布式文件系统的安装与使用 

二、对部署环境进行规划 

    创建数据库 
    数据库编码为:UTF-8 
    数据库引擎为:InnoDB 
    导入“基于 Dubbo 的分布式系统架构视频教程--简易版支付系统源码.rar”中的 
    “数据库--edu_simple_pay.rar”中的“edu_simple_pay.sql” 

调整公共配置文件 

应用部署前期准备 

1、common 工程构建、发布到 Maven 私有库

尤其注意 pay-common-config 工程的构建(配置文件修改后需要重新构建,引用处也要重新构建) 

2、facade 工程构建、发布到 Maven 私有库 

部署服务 

1、规划好服务部署目录,准备好服务管理脚本 

/home/wusc/edu/service/account/service-account.sh 
#!/bin/sh 
## java env 
export JAVA_HOME=/usr/local/java/jdk1.7.0_72 
export JRE_HOME=$JAVA_HOME/jre 
## you just need to change this param name 
APP_NAME=account 
SERVICE_DIR=/home/wusc/edu/service/$APP_NAME 
SERVICE_NAME=pay-service-$APP_NAME 
JAR_NAME=$SERVICE_NAME\.jar 
PID=$SERVICE_NAME\.pid 
cd $SERVICE_DIR 
case "$1" in 
    start) 
        nohup $JRE_HOME/bin/java -Xms128m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 & 
        echo $! > $SERVICE_DIR/$PID 
        echo "=== start $SERVICE_NAME" 
        ;; 
    stop) 
        kill `cat $SERVICE_DIR/$PID` 
        rm -rf $SERVICE_DIR/$PID 
        echo "=== stop $SERVICE_NAME" 
        sleep 5 
        P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'` 
        if [ "$P_ID" == "" ]; then 
            echo "=== $SERVICE_NAME process not exists or stop success" 
        else 
            echo "=== $SERVICE_NAME process pid is:$P_ID" 
            echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID" 

           kill -9 $P_ID 
        fi 
        ;; 
    restart) 
        $0 stop 
        sleep 2 
        $0 start 
        echo "=== restart $SERVICE_NAME" 
        ;; 
    *) 
        ## restart 
        $0 stop 
        sleep 2 
        $0 start 
        ;; 
esac 
exit 0 

2、使用  jenkins 来自动化部署服务 

3、通过 Dubbo 管控台检查各服务是否都部署成功 

 

部署 Web 应用 

1、规划好 Web 应用部署目录、端口、脚本 

bank-receive-tomcat     8081 
boss-tomcat             8082 
gateway-tomcat          8083 
notify-receive-tomcat   8084 
portal-tomcat           8085 
shop-tomcat             8086 
trade-tomcat            8087

/home/wusc/edu/web/bank-receive-tomcat/restart.sh 
## java env 
export JAVA_HOME=/usr/local/java/jdk1.7.0_72 
export JRE_HOME=$JAVA_HOME/jre 
## restart tomcat 
current_dir=$(cd `dirname $0`; pwd) 
echo "=== current_dir is:$current_dir" 
$current_dir/bin/shutdown.sh 
sleep 3 
rm -rf $current_dir/webapps/*/ 
sleep 2 
$current_dir/bin/startup.sh 

部署 APP 

/home/wusc/edu/app/queue-notify/app-queue-notify.sh 
#!/bin/sh 
## java env 
export JAVA_HOME=/usr/local/java/jdk1.7.0_72 
export JRE_HOME=$JAVA_HOME/jre 
## you only need to change next two parameters value 
APP_DIR=/home/wusc/edu/app/queue-notify 
APP_NAME=pay-app-queue-notify 
JAR_NAME=$APP_NAME\.jar 
cd $APP_DIR 
## check app process weather exists 
process=`ps aux | grep -w "$APP_NAME" | grep -v grep` 
if [ "$process" == "" ]; then 
    echo "=== $APP_NAME process not exists" 
else 
    echo "=== $APP_NAME process exists" 
    echo "=== $APP_NAME process is : $process" 
    ## get PID by process name 
    P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk '{print $2}'` 
    echo "=== $APP_NAME process PID is:$P_ID" 
    echo "=== begin kill $APP_NAME process" 
    kill $P_ID 
    sleep 3 
    P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk '{print $2}'` 
    if [ "$P_ID" == "" ]; then 
        echo "=== $APP_NAME process stop success" 
    else 
        echo "=== $APP_NAME process kill failed, PID is:$P_ID" 
        echo "=== begin kill -9 $APP_NAME process, PID is:$P_ID" 
        sleep 3 
        kill -9 $P_ID 
    fi 
fi 
sleep 2 
echo "=== begin start $APP_NAME" 
$JRE_HOME/bin/java -Xms128m -Xmx512m -jar $APP_DIR/$JAR_NAME >/dev/null 2>&1 & 
 
 

部署定时任务 

定时任务的部署与调用分离

/home/wusc/edu/timer/report/timer-report.sh 
#!/bin/sh 
## java env 
export JAVA_HOME=/usr/local/java/jdk1.7.0_72 
export JRE_HOME=$JAVA_HOME/jre 
## you only need to chage next two line value 
SERVICE_DIR=/home/wusc/edu/timer/report 
APP_NAME=pay-timer-report 
JAR_NAME=$APP_NAME\.jar 
sleep 1 
echo "=== invoke task, please wait" 
$JRE_HOME/bin/java -jar $SERVICE_DIR/$JAR_NAME >/dev/null 2>&1 & 
## until process stop to print log 
while true 
do 
   process=`ps aux | grep $APP_NAME | grep -v grep`; 
   if [ "$process" == "" ]; then 
        sleep 1; 
        echo "=== task complete"; 
        sleep 3; 
        break; 
   else 
        echo "=== process is running, please wait"; 
        sleep 10; 
        continue; 
   fi 
done 

猜你喜欢

转载自blog.csdn.net/weixin_40663800/article/details/84866671