docker版jxTMS使用指南:使用命令行参数定制启动

本文讲解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编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

你可能感兴趣的:(jxTMS,docker,python,SaaS,jxTMS,分布式)