• 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    这些开关的意义在其说明中已经很清楚了,我们只简略的做个说明。其主要包括两类:

    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

  • 相关阅读:
    BGP高级特性——ORF、GTSM、4字节AS号
    【缓存分类以及常见的缓存淘汰策略】
    Devops团队
    面经-蔚来一面2022.11.04
    [iOS开发]frame和bounds
    分布式物联网平台特点
    简约的博客网页制作 大学生个人博客网页设计模板 学生个人网页成品 DIV简单个人网站作品下载 静态HTML CSS个人网页作业源代码
    3D应用开发引擎HOOPS如何促进AEC数字化架构革新?
    机器学习之过拟合与欠拟合,K折交叉验证详解【含代码】
    The Sandbox Alpha 第三季排行榜公布
  • 原文地址:https://blog.csdn.net/jxandrew/article/details/133762189