本文讲解4.6版jxTMS中的命令行开关,整个系列的文章请查看:4.6版升级内容
docker版本的使用,请查看:docker版jxTMS使用指南
4.0版jxTMS的说明,请查看:4.0版升级内容
4.2版jxTMS的说明,请查看:4.2版升级内容
4.4版jxTMS的说明,请查看:4.4版升级内容
分布式构型有一个最简单的也是最基本的需求:当需要时可以临时启动一个进程来增加算力。自然的,这些临时启动的进程可能就需要不同的功能配置。
此前的jxTMS都是通过main.py结合配置文件进行定制化的启动与功能配置,面对这种临时启动的、可按需要灵活配置的需求就无法满足了。
所以,4.6版jxTMS中就改用了命令行开关与参数的方式来启动与配置。其开关包括:
optional arguments:
-h, --help show this help message and exit
-n NAME, --name NAME 本程序的主机名
-id HOSTID, --hostID HOSTID
本程序的主机ID
--dingding 启用钉钉
--auth 初始化安全认证
--site 加载站点信息
--obtainDeviceData 开启根据配置递交设备数据
--web 启动web
--restPort RESTPORT rest服务端口
--dataBus 启用系统数据总线
--webSocket 启用webSocket
--app 加载app模块
--module 加载module模块
--dbName DBNAME 本程序的数据库名,不设则不访问数据库
--dbHost DBHOST 本程序的数据库IP
--dbPort DBPORT 本程序的数据库端口
--dbUser DBUSER 本程序的数据库用户
--dbPwd DBPWD 本程序的数据库密码
--mqttServerIP MQTTSERVERIP
mqtt服务器IP,不设则不启用mqtt
--mqttServerUesr MQTTSERVERUESR
mqtt服务器用户
--mqttServerPasswd MQTTSERVERPASSWD
mqtt服务器密码
--mqttTopicWildcard MQTTTOPICWILDCARD
mqtt订阅主题的通配符
--serviceName SERVICENAME
服务名,不设则不启动服务
--serviceAlone 启动的服务不注册到目录服务中,不设置则注册
这些开关的意义在其说明中已经很清楚了,我们只简略的做个说明。其主要包括两类:
1、参数
用于设置某个参数,具有相应的默认值,如果不设则自动设为相应的默认值:
n,默认是:demo。指定主机名,每个jxTMS进程都必须设置自己的主机名,否则无法通过MQ收发数据。针对分布式构型,此参数更为重要,两个同名的进程同时启动的话,会导致消息收发紊乱
id,默认是:1001。数据库中各表的主键都是根据id、时间戳、序列号计算出来的,所以需要使用数据库的系统,也就是设置了dbName参数的系统,当需要向数据库中插入新数据时,需要设置与众不同的id,以避免潜在的数据表主键冲突
restPort,默认是:10028。对外提供rest服务的TCP端口号,只有同时打开web开关才会生效。此外,如果是如【/module/web.py】中所演示的利用jxTMS提供的基础设施来提供rest服务,则还需要打开auth开关,否则用户无法登入。应当注意的是:docker版jxTMS在用docker创建容器时,需要开放restPort参数所指定的端口
dbName,默认是:None。需要使用数据库的系统,必须设置dbName参数
dbHost,默认是:127.0.0.1。即默认是连接到docker版jxTMS自带的mysql服务
dbPort,默认是:3306
dbUser,默认是:root
dbPwd,默认是:123456
mqttServerIP,默认是:None。即不连接mqtt服务,指定127.0.0.1则连接到docker版jxTMS自带的mqtt服务
mqttServerUesr,默认是:None
mqttServerPasswd,默认是:None
mqttTopicWildcard,默认是:*
serviceName,默认是:None,如果设置了serviceName,就会启动一个服务,服务名是pyService.{serviceName},服务的全名是:pyService.{主机名,即n参数}.{serviceName}
注1:如果在设置了serviceName的同时又开启了serviceAlone,则serviceName服务不会注册到jxTMS主系统的catalogService中
注2:如果多个服务设置了相同的serviceName【未开启serviceAlone】,那么只有一个会注册到catalogService中,其它的同名服务都会被要求等待。如果这些服务都是无状态的,那这就相当于实现了在线热备,当已经注册的服务宕机后,在三个保活时间过去后,catalogService会将其删除,然后其它服务就可以顺利注册,接管服务了
其它参数都是见名知意,就不复赘述了。这里需要强调一下参数:mqttTopicWildcard。其定义了mqtt主题的通配符,即需要订阅的都是什么样的主题。默认是【*】,也就是全部订阅。如果设置了相应的通配符,则只有配置了该通配符的主题才会被订阅。
注:这里的通配符不是mqtt通配符,而是数据总线中的通配符,如【*】代表所有主题,【?xm】代表所有以xm两字母开头的主题,【*xm*】代表所有包含了xm两字母的主题等等
由于jxTMS的数据采集系统是以站点名为主题的,所以,如果设置了mqttTopicWildcard参数,则意味着所需加载的站点也会自动执行同样的匹配性过滤。
如果说,数据总线是用来纵向拆分数据采集、处理、应用的过程,可以将这些不同环境分散到不同的进程、服务器上来实现负载的合理分配。那么,mqtt通配符就是用来横向切分数据源,使其可以切分为一个个小的系统,从而将整个系统的负载在不同的小系统之间进行了切分。
概要之,mqtt通配符和数据总线,为4.6版jxTMS实现分布式处理,灵活而恰当的规划与调整系统负载,提供了有力的手段。
2、开关
用于启动某项功能。上述开关中没有参数的都是开关,不给出该开关,则意味着不启用;给出则意味着启用。其中需要重点说明的有:
dataBus,开启系统的数据总线,即默认的名为【dataBus】的数据总线,安全、钉钉、站点、mqtt订阅的主题等都需要开启系统数据总线,以向jxTMS主系统查询相关的配置
auth,开启用户授权与认证,如上所述,需要同时开启dataBus开关。开启后,将完成资源信息的加载、用户信息的加载、权限的加载
web,开启web服务,端口由restPort指定
webSocket,在开启web服务中支持webSocket功能
app和module,分别加载app和module目录下的所有.py文件【应在各自的__init__.py文件中import该模块】
site,加载站点信息,如上所述,需要同时开启dataBus开关。按数据采集器目前的处理框架,一般需配置mqtt相应的参数
obtainDeviceData,开启根据配置递交设备数据。随着站点越来越多、各种类型的设备越来越多、用户也越来越多,不同用户之间希望获取的数据、使用方式等都有所不同。如果都以编程来处理,会造成代码的臃肿、难以维护。所以4.6版的jxTMS提供了obtainDeviceData功能,即通过配置的方式向一个个的用户针对性的提供所需设备的数据。同样,也需要同时开启dataBus开关
其它功能都已经反复讲述过了,但webSocket和obtainDeviceData开关所涉及的功能都是新增功能,且较为复杂,所以后文将分别专文讲述。
参考资料:
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
下面的系列文章讲述了jxTMS的一些基本开发能力: