版权声明:本文为博主原创文章,未经博主允许不得转载。 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}
基本的就到这