自定义云服务开发(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27868061/article/details/82534107

demo下载地址:https://www.ablecloud.cn/download/SDK&Demo/DemoService-2.0.8.zip

所谓自定义云服务的意思,就是采用ablecloud开发框架,开发完毕的服务上传到ablecloud上,以后的设备数据可以直接转发到此服务

1.目录结构

下载下来的demo与一般maven文件类似,只是多出一个package目录,结构为

package: 

             config: 包含了自定义云服务的配置文件,启动服务时,会ablecloud-framework会从其中读取配置

             lib: 包含了开发依赖的所有jar包,注意pom.xml里基本是不包含任何依赖的,而且包含main方法的主类也不在我们开发的程序中,而是在ablecloud-framecloud.*.jar中

             log: 服务日志

             .DS_Store:  不知道干啥的

             start.cmd/start.sh: linux/windows下启动脚本

src: 源码目录,不包含主类,但是必须包含一个实现了ACService的类

2.配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <developer>
        <!-- 对应“个人信息->个人信息->开发者ID” -->
        <id>4</id>
    </developer>

    <authentication>
        <!-- 对应“密钥对管理->全部密钥对”,选择已启用的任意一对即可。 -->
        <access-key>33df24a54054067e80af49d939b429c2</access-key>
        <secret-key>5e2fec3440e23c5e807910b13b672015</secret-key>
        <timeout>5000</timeout>
    </authentication>

    <framework>
        <!-- 此处为开发环境配置,默认为测试环境,仅本地测试时生效-->
        <router>test.ablecloud.cn:5000</router>
    </framework>

    <service>
        <!-- 此处为继承ACService的类的相对路径,即UDS的唯一入口 -->
        <class>com.ablecloud.demo.DemoService</class>
        <!-- 此处为本机启动的端口号 -->
        <port>8080</port>
        <!-- 对应“产品管理->产品列表->主域名” -->
        <major-domain>ac</major-domain>
        <!-- 对应“产品管理->产品列表->子域” -->
        <sub-domain>test</sub-domain>
        <!-- 是否开启jmx监控 -->
        <jmx-flag>true</jmx-flag>
    </service>

    <!-- Options-->
    <client>
        <!-- UDS所有访问云端接口的超时时间 -->
        <timeout>5000</timeout>
        <!-- UDS所有访问云端接口的重试次数 -->
        <retry-count>1</retry-count>
    </client>

    <jetty>
        <!-- jetty的最大线程数配置-->
        <maxThreads>200</maxThreads>
        <!-- jetty的最小线程数配置-->
        <minThreads>8</minThreads>
        <!-- jetty的共享队列最大容量个数配置-->
        <maxCapacity>1024000</maxCapacity>
    </jetty>
</configuration>

没有多余的需要解释的,唯一的一个

service.class: 服务类,一个自定义云服务只有一个,包含在src下的源码里,实现了ACService类,在其中处理业务逻辑

ablecloud-framework.*.jar会加载这个类

2.启动脚本

#!/bin/bash

#jar包目录
lib_path="./lib"

#启动的包含主类的jar包前缀,后面应该包含版本号
framework_prefix="ablecloud-framework"

#最后启动的jar包名称
framework=""

#配置文件
conf_file=""

#模式
mode="test"
user_lib_path=""
uds_id=""

#最大内存
mx="1024"

#启动内存
ms="256"

usage() {
    echo "Usage: $0 [-c conf_file] [-l user_lib_path] [-m mode] [-i identity] [-x maximum_memory_in_MB] [-s minimum_memory_in_MB]"
    echo "    -c: specify user-defined configuration file."
    echo "    -l: specify library path which you will used excluding framework and framework's lib."
    echo "    -m: specify run mode. should be one of [test,production], default is production."
    echo "    -i: identity of the UDS: domainId_subDomainId_serviceName_serviceVersion."
    echo "    -x: maximum memory in MB which can be used by the JVM."
    echo "    -s: minimum memory in MB which should be allocated for the JVM."
}

#当以上选项存在时
while getopts "c:l:m:i:x:s:h" opt
do
    case ${opt} in
        #设置配置文件
        c)
            conf_file=$OPTARG
            ;;
        #用户类路径
        l)
            user_lib_path=$OPTARG
            ;;
        #模式,test或者production
        m)
            mode=$OPTARG
            if [ "${mode}" != "test" ] && [ "${mode}" != "production" ]
            then
                usage
                exit 1
            fi
            ;;
        #udsid
        i)
            uds_id=$OPTARG
            ;;
        x)
            mx=$OPTARG
            ;;
        s)
            ms=$OPTARG
            ;;
        h)
            usage
            exit 1
            ;;
        ?)
            usage
            exit 1
            ;;
    esac
done

#ls命令获取类路径下指定jar包名称
framework=`ls ${lib_path}/${framework_prefix}*.jar`

#获取到的jar包数量
fw_num=`echo ${framework} | awk -F' ' '{print NF}'`

#jar包数量错误
if [ ${fw_num} -lt 1 ]
then
    echo "could not find cloud service framework jar file"
    exit 2
elif [ ${fw_num} -gt 1 ]
then
    echo "find more than one cloud service framework jar files["${framework}"]"
    exit 2
else
    framework=`echo ${framework} | awk -F' ' '{print $1}'`
fi

#jvm参数引导类路径
param="-Xbootclasspath/a:"

#lib目录下所有jar包名称,都是引导类路径
libs=`ls ${lib_path}/*.jar`
for lib in ${libs}
do
    param=${param}${lib}:
done

#拼接上用户类路径下的jar包
if [ -n "${user_lib_path}" ] && [ "${user_lib_path}" != "${lib_path}" ]
then
    libs=`ls ${user_lib_path}/*.jar`
    for lib in ${libs}
    do
        param=${param}${user_lib_path}"/"${lib}:
    done
fi

#模式,test还是production
args="-Dmode=${mode} "

if [ -n "$conf_file" ]
then
    args=${args}"-Dconf_file=${conf_file}"
fi

if [ -n "$uds_id" ]
then
    args=${args}"-Duds_id=${uds_id}"
fi

#执行ablecloud-framework.*.jar
exec java ${param} ${args} -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Xmx${mx}m -Xms${ms}m -jar ${framework}

基本的就到这

猜你喜欢

转载自blog.csdn.net/qq_27868061/article/details/82534107