步骤三:编辑发布配置

在编辑发布配置之前,我们先设定一个场景:
假定工厂有一个监控器,可以读取设备运行参数 x,y,z,多个参数经过计算之后会得到一个状态值,我们只想收到超过 10 的状态值,然后进行发布。
注:该场景只是为了帮助大家更快的使用起 BIE 管理平台,例如使用 hub 服务、函数框架等。真实场景往往更加复杂。

实施方向

image.png

  • MQTT-Client 接入 openedge-hub 实现消息对订阅发布
  • openedge-function-manager 实现对函数运行时的调度
  • openedge-function-python27 实现参数计算
  • openedge-function-sql 实现结果过滤

概念介绍

  • 存储卷:BIE 云端的一个存储卷可以理解为下发配置中的一个文件夹,一次下发中可以包含多个文件夹,文件夹可以是空的,也可以是包含文件的。在 BIE 云端的概念中,存储卷包含了宿主机目录的属性,其会放置在宿主机对应的目录之下。
  • 存储卷挂载:服务是在容器内运行的,此时存在两种需求,一种是服务配置文件的获取,一种是服务数据持久化。我们是通过存储卷的挂载实现的,通过宿主机目录和容器内目录的映射,来实现配置读取和数据持久化。

openedge-hub服务配置

hub 服务需要 3 个存储卷,分别用来映射配置、映射日志和数据持久化,其中日志和数据持久化为可选配置。

创建配置存储卷

image.png

我们选择存储卷模版 openedge模块配置,起名为 bie-demo-hub-conf 并确定。

image.png

我们发现存储卷中已经默认生成了 service.yml 文件,这是 openedge 模块默认的配置文件名
点击“添加存储卷挂载“,选择刚才创建好的三个存储卷。

image.png

我们输入 hub 的配置:

listen:
  - tcp://0.0.0.0:1883
principals:
  - username: test
    password: hahaha
    permissions:
      - action: 'pub'
        permit: ['#']
      - action: 'sub'
        permit: ['#']
subscriptions:
  - source:
      topic: 't'
    target:
      topic: 't/topic'
logger:
  path: var/log/openedge/service.log
  level: "debug"

配置的定义为,我们有一个用户名为 test,密码为 hahaha 的接入身份,拥有所有 pub、sub 权限,并且 hub 会将主题 t 转发给主题 t/topic。更多配置解析请参考配置文件指南

image.png

保存并发布版本。

image.png

创建日志存储卷

我们选择存储卷模版空目录存储卷,起名为 bie-demo-hub-log 并确定。

空目录存储卷创建便会发布一版,它不可以新增修改文件,只是起到文件夹/目录作用。

image.png

image.png

创建数据持久化存储卷

创建数据持久化存储卷同创建日志存储卷过程一样,我们起名为 bie-demo-hub-data。

创建 openedge-hub 服务

我们在核心的应用配置详情点击添加服务,选择 openedge-hub 模块,起名为 local-hub,并配置端口映射 1883:1883,代表着将容器内的 1883 端口映射到宿主机上。

image.png

我们进行 hub 模块的存储卷挂载:

image.png

将我们的存储卷依次挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/openedge 上。
至此,我们的 openedge-hub 服务就配置完了。

openedge-function-manager 服务配置

openedge-function-manager 服务需要 1 个存储卷(也可以根据需要映射日志文件),用来映射配置文件。

创建配置存储卷

首先创建存储卷,选择模版openedge模块配置,起名为 bie-demo-func-conf 并确定。

点击生成配置。

image.png

同在 openedge-hub 一样,输入配置,保存并发布版本

hub:
  address: tcp://local-hub:1883
  username: test
  password: hahaha
rules:
  - clientid: localfunc-1
    subscribe:
      topic: t
    function:
      name: compute
    publish:
      topic: t/compute
  - clientid: localfunc-2
    subscribe:
      topic: t/compute
      qos: 1
    function:
      name: filter
    publish:
      topic: t/filter
      qos: 1
functions:
  - name: compute
    service: function-compute
  - name: filter
    service: function-filter
logger:
  path: var/log/openedge/service.log
  level: "debug"

配置的定义为,openedge-function-manager 订阅主题 t 并通过 compute 函数进行计算,然后以 t/compute 主题发出,订阅主题 t/compute 并通过 filter 函数进行计算,然后以 t/filter 主题发出。其中 compute 函数以服务 function-compute 启动,filter 函数以服务 function-filter 启动。更多配置解析请参考配置文件指南

创建 openedge-function-manager 服务

我们在核心的应用配置详情点击添加服务,选择 openedge-function-manager 模块,起名为 local-func。

image.png

进行存储卷挂载:

image.png

将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/openedge 上。
至此,我们的 openedge-function-manager 服务就配置完了。

openedge-function-python27 服务配置

openedge-function-python27 服务需要 2 个存储卷,用来映射配置文件和代码体。

创建配置存储卷

首先创建存储卷,选择模版 openedge模块配置,起名为 bie-demo-compute-conf 并确定
同在 openedge-hub 一样,输入配置,保存并发布版本。

functions:
  - name: 'compute'
    handler: 'index.handler'
    codedir: 'var/db/openedge/compute'

配置的定义为,定义函数 compute,代码路径为容器内 var/db/openedge/compute。更多配置解析请参考配置文件指南

创建代码存储卷

首先创建存储卷,选择模版 CFC函数模版,起名为 bie-demo-compute-code 并确定。

image.png

选择引入 CFC 函数,选择我们事先从百度智能云 CFC 创建好的函数,目前只支持 python27、python36 引入。

image.png

我们在 CFC 创建了一段简单代码,目前只支持 python27、python36 函数的导入

def handler(event, context): 
    event["result"] = event["x"] + event["y"] + event["z"]
    return event

发布新版即可。

创建 openedge-function-python27 服务

我们在核心的应用配置详情点击添加服务,选择 openedge-function-python27 模块,起名为 function-compute。其中,函数 runtime 模块的副本数必须为 0。

image.png

进行存储卷挂载:

image.png

将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/openedge 上。
至此,我们的 openedge-function-python27 服务就配置完了。

openedge-function-sql 服务配置

openedge-function-sql 服务需要 1 个存储卷,用来映射配置文件。

创建配置存储卷

首先创建存储卷,选择模版 openedge模块配置,起名为 bie-demo-filter-conf 并确定
同在 openedge-hub 一样,输入配置,保存并发布版本。

functions:
  - name: filter
    handler: 'select * where result > 10'

配置的定义为,定义函数 filter,将会过滤 result 小于 10 的消息。更多配置解析请参考配置文件指南

创建openedge-function-sql服务

我们在核心的应用配置详情点击添加服务,选择 openedge-function-sql 模块,起名为 function-filter。其中,函数 runtime 模块的副本数必须为 0。

image.png

进行存储卷挂载:

image.png

将存储卷挂载到服务上,并保存,其中配置文件需要映射到容器内目录 etc/openedge 上。
至此,我们的 openedge-function-sql 服务就配置完了。

查看最终配置结果并发布

查看最终配置的服务

image.png

查看所有引用的存储卷

image.png

发布新版本配置

image.png