• 自定义模块
    • 目录约定
      • Docker容器模式
      • Native进程模式
    • 配置约定
    • 启动约定
    • 模块SDK

    自定义模块

    在开发和集成自定义模块前请阅读开发编译指南,了解OpenEdge的编译环境要求。

    自定义模块不限定开发语言,可运行即可。了解下面的这些约定,有利于更好更快的集成自定义模块。

    目录约定

    Docker容器模式

    容器中的工作目录是:/

    容器中的配置路径是:/etc/openedge/module.yml

    容器中的配置资源读取目录是:/var/db/openedge/module/<模块名>

    容器中的持久化数据输出目录是:/var/db/openedge/volume/<模块名>

    容器中的持久化日志输出目录是:/var/log/openedge/<模块名>

    具体的文件映射如下:

    - /var/db/openedge/module//module.yml:/etc/openedge/module.yml- /var/db/openedge/module/:/var/db/openedge/module/- /var/db/openedge/volume/:/var/db/openedge/volume/- /var/log/openedge/:/var/log/openedge/

    注意:如果数据需要持久化在设备(宿主机)上,比如数据库和日志,必须保存在上述指定的持久化目录中,否者容器销毁数据会丢失。

    Native进程模式

    模块的工作目录和OpenEdge主程序的工作目录相同。

    模块的配置路径是:<openedge_host_work_dir>/var/db/openedge/module/<模块名>/module.yml

    模块的配置资源读取目录是:<openedge_host_work_dir>/var/db/openedge/module/<模块名>

    模块的数据输出目录是:<openedge_host_work_dir>/var/db/openedge/volume/<模块名>

    模块的日志输出目录是:<openedge_host_work_dir>/var/log/openedge/<模块名>

    配置约定

    模块支持从文件中加载yaml格式的配置,Docker容器模式下读取/etc/openedge/module.yml,Native进程模式下读取<openedge_host_work_dir>/var/db/openedge/module/<模块名>/module.yml。

    也支持从输入参数中获取配置,可以是json格式的字符串。比如:

    1. modules:
    2. - name: 'my_module'
    3. entry: 'my_module_docker_image'
    4. params:
    5. - '-c'
    6. - '{"name":"my_module","address":"127.0.0.1:1234",...}'

    也支持从环境变量中获取配置。比如:

    1. modules:
    2. - name: 'my_module'
    3. entry: 'my_module_docker_image'
    4. env:
    5. name: my_module
    6. address: '127.0.0.1:1234'
    7. ...

    启动约定

    模块以进程方式启动,是独立的可执行程序。首先配置的约定方式加载配置,然后运行模块的业务逻辑,最后监听SIGTERM信号来优雅退出。一个简单的golang模块实现可参考mqtt remote模块。

    模块SDK

    如果模块使用golang开发,可使用openedge中提供的部分SDK,位于github.com/baidu/openedge/module。

    mqtt.Dispatcher可用于向mqtt hub订阅消息,支持自动重连。该mqtt dispatcher不支持消息持久化,消息持久化应由mqtt hub负责,mqtt dispatcher订阅的消息如果QoS为1,则消息处理完后需要主动回复ack,否者hub会重发消息。remote mqtt模块参考

    runtime.Server封装了grpc server和函数计算调用逻辑,方便开发者实现消息处理的函数计算runtime。python2.7 runtime参考

    master.Client可用于调用主程序的API来启动、重启或停止临时模块。账号为使用该master client的常驻模块名,密码使用module.GetEnv(module.EnvOpenEdgeModuleToken)从环境变量中获取。

    module.Load可用于加载模块的配置,支持从指定文件中读取yml格式的配置,也支持从启动参数中读取json格式的配置。

    module.Wait可用于等待模块退出的信号。

    logger可用于打印日志。

    最后更新于 2018-12-28 10:23:09

    原文: https://openedge.tech/docs/customize/How-to-develop-a-customize-module-for-openedge