dubbo部署脚步

本文介绍了一套基于Dubbo的服务部署脚本方案,包括应用层的消息处理、通知及消息消费脚本,服务提供者层面的订单、记账、消息中心等服务的部署脚本,并提供了启动和停止所有服务的总控脚本。

dubbo部署脚本

目录结构

.
├── app                                        //应用
│   ├── message                                //消息
│           ├── ctoedu-pay-app-message.sh      //脚本
│   ├── notify                                 //通知
│           ├── etocdu-pay-app-notify.sh       
│   ├── queue                                  //消息消费者
│           ├── etocdu-pay-app-notify.sh       
│
├── service                                    //服务提供者
│   ├── account                                //订单
│           ├── service-account.sh    
│   ├── accounting                             //记账系统
│           ├── service-accounting.sh    
│   ├── message                                //消息中心
│           ├── service-message.sh    
│   ├── notify                                 //通知
│           ├── service-notify.sh    
│   ├── trade                                  //交易
│           ├── service-trade.sh    
│   ├── user                                   //用户
│           ├── service-user.sh    
│   ├── start-all-service.sh                   //启动所有
│   ├── stop-all-service.sh                    //停止所有

ctoedu-pay-app-message.sh 脚本

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre

## application path
APP_DIR=/home/ctoedu/app/message
APP_NAME=ctoedu-pay-app-message

JAR_NAME=$APP_NAME\.jar

cd $APP_DIR

case "$1" in

    start)
		## check app process weather exists
		$0 stop
		echo "=== satrt $APP_NAME"
		nohup $JRE_HOME/bin/java -Xms128m -Xmx512m -jar $APP_DIR/$JAR_NAME >/dev/null 2>&1 &
        ;;

    stop)
		## check app process weather exists
		process=`ps aux | grep -w "$APP_NAME" |grep -w "java" | 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 -w "java"| 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 -w "java"| 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 5
				kill -9 $P_ID
			fi
		fi
        ;;

    restart)
        $0 stop
        sleep 2
        $0 start
        echo "=== restart $APP_NAME"
        ;;

    *)
        ## start
        $0 start
        ;;
esac
exit 0

service-account.sh 脚本

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre

APP_NAME=account

SERVICE_DIR=/home/ctoedu/service/$APP_NAME
SERVICE_NAME=ctoedu-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 -Xmx1024m -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

start-all-service.sh

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre

/home/ctoedu/service/message/service-message.sh start
sleep 5
/home/ctoedu/service/account/service-account.sh start
sleep 5
/home/ctoedu/service/accounting/service-accounting.sh start
sleep 5
/home/ctoedu/service/notify/service-notify.sh start
sleep 5
/home/ctoedu/service/trade/service-trade.sh start
sleep 5
/home/ctoedu/service/user/service-user.sh start

stop-all-service.sh

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre

/home/ctoedu/service/account/service-account.sh stop
/home/ctoedu/service/accounting/service-accounting.sh stop
/home/ctoedu/service/notify/service-notify.sh stop
/home/ctoedu/service/trade/service-trade.sh stop
/home/ctoedu/service/user/service-user.sh stop
/home/ctoedu/service/message/service-message.sh stop
### 如何部署 Apache Dubbo 分布式服务框架 #### 准备工作 为了成功部署Apache Dubbo,需要先准备好环境配置。确保安装了JDK版本8及以上,并设置好JAVA_HOME环境变量[^1]。 #### 下载并构建项目 可以从官方GitHub仓库克隆最新源码或下载稳定版压缩包来获取Dubbo的服务端和客户端实现代码。对于想要参与贡献或是深入理解内部机制的人来说,建议通过Git方式拉取整个工程;而对于仅需使用的开发者,则可以直接下载打包好的文件。 #### 配置依赖项和服务提供者 由于Dubbo是基于Spring容器运行的,在实际操作过程中要引入必要的Maven或其他形式管理工具中的依赖声明到pom.xml或者其他类似的配置文件里去。接着定义自己的业务逻辑作为服务接口及其具体实现类,标记@Service注解以便被识别为可供发布的远程调用资源。 ```xml <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>x.x.x</version><!-- 版本号 --> </dependency> ``` #### 启动注册中心 推荐使用Zookeeper作为默认的选择之一来充当此角色,因为它具备良好的可靠性和性能表现。启动之前确认已经正确设置了相应的连接参数,比如host/port等信息,这些通常会在application.properties或者yml格式的应用程序属性文件中指定[^2]。 ```properties spring.application.name=demo-provider dubbo.registry.address=zookeeper://127.0.0.1:2181 ``` #### 发布与消费服务 完成上述准备工作之后就可以编写具体的发布方(Provider)以及订阅方(Consumer),利用`@Reference` 和 `@Service` 注解简化编码流程。当一切就绪后分别编译执行两个模块下的main函数即可让它们之间建立起有效的交互关系。 ```java // Provider side code snippet @Service(version = "1.0.0") public class DemoServiceImpl implements DemoService { public String sayHello(String name) { return "Hello, " + name; } } // Consumer side code snippet @RestController @RequestMapping("/demo") public class DemoController { @Reference(version = "1.0.0", url="dubbo://localhost:20880") private DemoService demoService; @GetMapping(value = "/hello/{name}") public String hello(@PathVariable String name){ return demoService.sayHello(name); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值