当前位置: 首页 > news >正文

docker版jxTMS使用指南:勾连python

本文讲解docker版jxTMS的功能扩展,整个系列的文章请查看:docker版jxTMS使用指南

在jxTMS设计思想的安全一文中,笔者讲述了考虑到安全问题,所以jxTMS限制了业务处理逻辑部分的能力。但企业的需求是多种多样的,必须考虑到全能力的支持。

所以jxTMS提供了全能力扩展来解决能力不够的问题。在jxTMS的体系框架中,这部分归入了扩展服务【参考jxTMS+进销存:概述中的阐述】。该功能属于jxTMS内置功能,所以docker版本也自然是支持的,下面我们就开始演示是如何扩展的。

首先正常启动jxTMS,然后在ssh客户端程序中,用dockerTMSRoot【注意:不是查看实时日志的dockerTMS配置】配置进行连接,dockerTMSRoot配置如果还没有配置,请参考docker版jxTMS使用指南:helloWorld!一文中的说明。

登录后,执行:

cd /home/tms/python
python3 py.py

出现【pyService.pythonDemo.demo1 register:ok/服务器正常响应】的消息,就说明该扩展已经正确的连接到了jxTMS中。

而此时,在tms容器的root控制终端,也会显示如下的日志信息【去除时间等信息】:

pyService.demo1 register,check result:ok
pyService.pythonDemo.demo1【pyService/demo1】添加到目录中

表明我们刚才启动的python扩展【名为:pyService.pythonDemo.demo1】已经正确的注册到jxTMS中了,可以使用该扩展了。

然后,打开capa.py文件,修改sayHello函数:

@myModule.event('cmd', 'sayHello')
def sayHello(self, db, ctx):
    #发送给python扩展的json参数
    ps = jxJson.getObjectNode()
    ps.set('n1','xxx')
    ps.set('n2','yyy')
    #所以ps是:{'n1':'xxx','n2':'yyy'}
    
	#向python扩展发送testCmd命令,并送入参数ps
    rs = catalogService.call('pyService.pythonDemo.demo1','testCmd',ps)
    #在日志中打印接收到的响应信息
    jx.log('catalogService call rs:{}',rs)

然后保存并上传capa.py,并热机刷新

然后点击快捷栏【演示->helloWorld】,然后点击【点我】按钮。

这时可以看到实时日志显示:

catalogService call rs:{"cmd":"test","r1":"xxx","r2":"yyy","ty":"response"}

而dockerTMSRoot终端显示:

{"level":"info","time":"2023-03-18T17:29:01.010+0800","linenum":"utils/jxLog.go:82","msg":"pyService.pythonDemo.demo1 从【demoHost1】接收到控制命令:testCmd"}
{'n1': 'xxx', 'n2': 'yyy'}

这些信息表明python扩展正确的接收到了我们提供的参数并予以了正确的响应。

OK!我们现在来看看python扩展是什么样的。显示py.py文件内容:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

from jx.jxGo import jxGo
from jx.jxGoBaseService import jxGoBaseService

class Py(jxGoBaseService):
    def __init__(self, ty, hostname, name):
        super(Py,self).__init__(ty, hostname, name)

    def testCmd(self,params):
        print(params)
        return {'ty':'response','cmd':'test','r1':params['n1'],'r2':params['n2']}
        
#读取系统配置的主机名
#系统配置位于conf目录下的system.json文件中
hn = jxGo.getSysConfig('hostName')
#以类型:pyService,名字:demo1和主机名,创建一个Py对象
py = Py('pyService',hn,'demo1')
#启动py开始执行,直到程序结束【按ctrl+c结束】
py.start()

其声明了一个Py的类,该类继承自jxGoBaseService。该类中定义了一个testCmd的函数,该函数先是打印送入的参数,然后做了一个回应,就是简单的读取参数的值再回送。

该扩展的名字格式是:类型.主机名.名称,就是我们前面在py.py启动后成功注册时所看到的名称:pyService.pythonDemo.demo1。

在python扩展成功注册后,我们就可以调用catalogService的call函数向其发送命令。call函数的签名为:

catalogService.call(fullname,cmd,params)

通过目录服务向一个服务发送命令

参数:
	fullname:服务全名,格式为:类型.主机名.名称
	cmd:要求服务执行的命令
	params:json型参数
返回值:
	json服务执行结果

对于python来说,只要在继承自jxGoBaseService的子类中定义一个函数,就可以用catalogService.call来访问该函数了。

如果客户是ubuntu系统,并安装了python3.8版本的python,那么通过如下的步骤就可以实现自己的python扩展:

1、安装如下的python包:

  • pytz

  • psutil

  • numpy

2、把/home/tms/python目录拷贝到自己的机器上,然后根据自己的需要修改py.py

3、在conf目录下的system.json文件中增加rabbitMQ的配置:

  • mqServerIP:rabbitMQ服务所在ip地址,这里必须是tms容器所在服务器的ip地址

  • mqServerPort:rabbitMQ服务使用的端口,可忽略,如忽略则为默认的5672端口

  • mqUsername:rabbitMQ服务分配的用户名,如未使用用户则忽略

  • mqPassword:rabbitMQ服务分配的密码,如未使用用户则忽略

4、关闭并删除tms容器,重新创建tms容器时,增加一个5672端口的映射

大家通过上述的演示,应该明白python扩展,其实就是一个catalogService的客户端程序。catalogService是jxTMS核心的目录服务,主要是用来对所有的web服务器、应用服务器、所有启用的组织进行统一的管理与调度,这里还利用其实现了python扩展。

catalogService支持保活、热备份,同时还具有下达代码由目标机器执行的能力。是jxTMS的核心管控部件,即没有catalogService服务,jxTMS一样可以正常运行,但就没有了对所有的web服务器、应用服务器、所有启用的组织和服务扩展进行集中的管理、控制与调度能力。

注:python扩展所引用的catalogService客户端组件,是笔者用go所写并编译为so库,所以只能用于linux系统。由于笔者使用的都是ubuntu系统,其它类型的linux笔者并未进行过测试。所以如果想使用python扩展,最好先自己用py.py做个测试

笔者曾使用jxTMS的扩展能力开发过智能转运箱,验证了python能力扩展的全能力支持。

参考资料:

jxTMS设计思想

jxTMS编程手册

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

如何用jxTMS开发一个功能

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

jxTMS的HelloWorld

相关文章:

  • 值得记忆的STL常用算法,分分钟摆脱容器调用的困境,以vector为例,其余容器写法类似
  • 重学Java设计模式-结构型模式-组合模式
  • Android11以上版本使用高德定位,定位成功,卫星数一直为0
  • 【十二天学java】day06之方法详解
  • Revit明细表计算重量和明细表导出功能
  • 基于飞桨实现的特定领域知识图谱融合方案:ERNIE-Gram文本匹配算法
  • Python实现二叉树递归遍历
  • 如何在 Vue 中使用 防抖 和 节流
  • 高效实施ClickHouse数据备份
  • 关于qt creator手动添加构建套件kit问题
  • 【进阶数据结构】——红黑树
  • 初识进程
  • Mybatis搭建环境及其原理【搭建Mybatis程序】
  • 一次内存泄露排查
  • 1.linux操作命令
  • Intel处理器体系结构:CPU运行模式
  • MySQL高级篇_第16章_多版本并发控制
  • 交通信号标志识别软件(Python+YOLOv5深度学习模型+清新界面)
  • POM依赖报错解决方案汇总
  • 啥叫工程?啥叫工程师?
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉