Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)

文章目录

  • 部署(单节点)
    • 一、前期准备
    • 二、对部署环境进行规划
    • 创建数据库
    • 调整公共配置文件
    • 应用部署前期准备
    • 部署服务
    • 部署 Web 应用
    • 部署定时任务

Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第1张图片
一、 工程结构
第三方支付系统架构

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 模拟商城

讲解杂点:

如何进行测试和开发
pay-common-parent项目中的 有两个一个是main 一个是test mqsql, 在运行maven参数的时候通过-p参数,就可以引用测试环境或者开发的测试环境,同样的代码可以部署两套。

二、 系统简要功能演示
三、技术点介绍

  1. FastDFS 分布式文件系统的使用
    (存储商户的图片信息,用户客户端和管理客户端都能使用文件,达到文件的共享,比如上传身份证进行实名认证)
  2. ActiveMQ 消息队列的使用
    上面的通知服务和通知消息接受模块,在通知服务接口中,写明了地址,在pay-common-config项目中指明了,哪个项目接受,可以看到NOTIFY_RECIVE_URL=xxxxxxpay-web-notify-receive
  3. Redis 分布式缓存的使用
    读的多写的少的项目都建议用redis

四、 部署结构介绍

部署(单节点)

一、前期准备

1、MySQL 数据库的安装:MySQL-5.6.22,自行安装
2、Dubbo 视频教程–基础篇–第 03 节–ZooKeeper 注册中心安装
3、Dubbo 视频教程–基础篇–第 06 节–Dubbo 管理控制台的安装
4、Dubbo 视频教程–基础篇–第 10 节–Dubbo 监控中心的介绍与简易监控中心的安装
5、持续集成管理平台(SVN、Nexus、Maven、Hudson)的安装:
Dubbo 视频教程–基础篇–第 11 节至 18 节
6、Dubbo 视频教程–高级篇–第 21 节–ActiveMQ 的安装与使用
7、Dubbo 视频教程–高级篇–第 22 节–Redis 的安装与使用
8、Dubbo 视频教程–高级篇–第 23 节–FastDFS 分布式文件系统的安装与使用

二、对部署环境进行规划

Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第2张图片

创建数据库

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

调整公共配置文件

Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第3张图片
修改包括mysql、邮件等配置信息,只是单纯了解架构的不需要。

应用部署前期准备

1、common 工程构建、发布到 Maven 私有库
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第4张图片
尤其注意 pay-common-config 工程的构建(配置文件修改后需要重新构建,引用处也要重新构建)
先构架pay-common-parent,因为其他项目有很多依赖于它
2、facade 工程构建、发布到 Maven 私有库
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第5张图片

部署服务

1、规划好服务部署目录,准备好服务管理脚本
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第6张图片
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第7张图片

/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、使用 Hudson 来自动化部署服务
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第8张图片
3、通过 Dubbo 管控台检查各服务是否都部署成功
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第9张图片

部署 Web 应用

1、规划好 Web 应用部署目录、端口、脚本
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第10张图片
修改tomcat端口的时候配置文件中的三个都要改
修改tomcat端口

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

tomcat下的脚本

/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/*/  //删除webapps中的所有目录
sleep 2
$current_dir/bin/startup.shv

部署 APP,消息队列的监听
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第11张图片
对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 &

部署定时任务

定时任务的部署与调用分离
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第12张图片
值是将定时任务的项目部署在了某个目录中没有具体的脚本
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第13张图片
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第14张图片
注意创建这个定时任务的工程的时候是“创建一个自由风格的软件项目”,而不是maven项目
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第15张图片
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第16张图片
上面的定时任务调度timer-report设置为每天凌晨三点二十五分调度

注意build periodically schedule 是执行定时任务的设置
下面的poll scm是查看版本库中是否有变动
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)_第17张图片
调用脚本的机器地址和脚本目录

这里和之前的maven项目配置不一样,之前是在系统设置中的ssh sites

这里需要的插件“Hudson SSH plugin” “Publish Over SSH” 这两个,装个这两个插件才能配置系统设置中的ssh sites 和 ssh servers

定时任务脚本:

/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

转载于:https://www.cnblogs.com/LeesinDong/p/10835322.html

你可能感兴趣的:(Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点))