开发微服务应用

更新时间:
2024-12-25

开发微服务应用

本文以开发一个温度上报微服务为例,介绍如何基于软件工厂提供的 RealEvo-IDE 集成开发工具进行微服务应用的开发、编译、打包,并上传至 ECSM。更多微服务开发指导,请参见 翼辉分布式软总线 教培文档。

前提条件

已参考 搭建开发环境 完成 RealEvo-IDE 的安装与配置,并创建、编译了 SylixOS ECS Base 和云原生 SDK。

操作步骤

步骤 1:创建 SylixOS App

  1. 打开 RealEvo-IDE,在上方导航栏中单击 File > New > SylixOS App

  2. 在 SylixOS App 创建工程界面的 Project name 中填入工程名,如 thermal_server,单击 Next,进入 SylixOS Base 配置界面。

  3. 在 SylixOS Base 配置界面,单击 SylixOS Base Project 右侧的 File SystemWorkspace,选择 搭建开发环境 时创建的 SylixOS ECS Base 工程,单击 Finish

  4. 在生成的 thermal_server.c 工程文件内输入如下应用程序代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <pthread.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include "vsoa_server.h"
    #include "vsoa_platform.h"
    
    #define MY_SERVER_PASSWD "123456"
    
    static vsoa_server_t *server;
    static void *publish_thermal_thread (void *arg)
    {
       vsoa_url_t url;
       vsoa_payload_t payload;
       char param[100];
       url.url = "/v1/thermal";
       url.url_len = strlen(url.url);
       payload.data = NULL;
       payload.data_len = 0;
       payload.param = param;
       while (1) {
          sleep(1);
          if (!vsoa_server_is_subscribed(server, &url)) {
                continue;
          }
          payload.param_len = sprintf(param, "{\"thermal_data\": 0}");
          vsoa_server_publish(server, &url, &payload);
       }
       return  (NULL);
    }
    
    int main (int argc, char **argv)
    {
       uint16_t server_port = 5001;
       int cnt, max_fd;
       fd_set fds;
       pthread_t id;
       struct sockaddr_in addr;
       struct timespec timeout = { 1, 0 };
       bzero(&addr, sizeof(struct sockaddr_in));
       addr.sin_family = AF_INET;
       addr.sin_port = htons(server_port);
       addr.sin_addr.s_addr = INADDR_ANY;
    
    #ifdef VSOA_HAS_SIN_LEN
       addr.sin_len = sizeof(struct sockaddr_in);
    #endif
       server = vsoa_server_create("{\"name\":\"thermal_server\"}");
       if (!server) {
          fprintf(stderr, "Can not create VSOA server!\n");
          return  (-1);
       }
       vsoa_server_passwd(server, MY_SERVER_PASSWD);
       if (!vsoa_server_start(server, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))) {
          vsoa_server_close(server);
          fprintf(stderr, "Can not start VSOA server!\n");
          return  (-1);
       }
       pthread_create(&id, NULL, publish_thermal_thread, NULL);
       while (1) {
          FD_ZERO(&fds);
          max_fd = vsoa_server_fds(server, &fds);
          cnt = pselect(max_fd + 1, &fds, NULL, NULL, &timeout, NULL);
          if (cnt > 0) {
                vsoa_server_input_fds(server, &fds);
          }
       }
       return  (0);
    }
    

步骤 2:配置头文件路径

  1. thermal_server 工程上单击右键,选择 Properties,进入工程属性配置页面。
  2. 在工程属性配置页面左侧导航栏中,单击 SylixOS Project > Compiler Setting,进入编译配置界面。在编译配置界面上方的标签中,单击 Include Path 进入头文件配置界面。
  3. 在头文件配置界面中,单击右侧的 Workspace,添加云原生 SDK 中的 VSOA 库头文件所在目录 libjson 和 libvsoa,并单击 Apply,保存配置。

步骤 3:配置库文件链接

  1. 在工程属性配置页面左侧导航栏中,单击 SylixOS Project > Linker Setting,进入链接配置界面。单击右侧 Name 依次添加如下三个库名称,并单击 Apply,保存配置。

  2. 在链接配置界面,单击 Library Path 页签,切换至库路径配置界面。在库路径配置界面右侧单击 Workspace,选择添加如下库路径。配置完成后,单击 Apply and Close,保存并关闭配置界面。

步骤 4:编译 SylixOS App

  1. thermal_server 工程上单击右键,选择 Build Project 编译工程,或者单击 RealEvo-IDE 工具栏中的 🔨 进行编译。
  2. 编译过程中 Console 会有以下输出,提示 Success 则表示编译成功。对应的可执行文件 thermal_server 将生成在工程的 Debug 目录下。

步骤 5:打包 SylixOS App 微服务镜像

  1. thermal_server 工程上单击右键,选择 Container > ECS Package,启动打包向导。

  2. 在打包向导界面,参考表 1 配置打包参数,并单击 Next,进入打包导出界面。

    表 1 配置参数说明

    参数是否必选说明
    Local Bundle为创建容器指定 Bundle 所在的临时目录位置,支持自定义,容器打包过程中会在该目录下生成临时目录与文件
    Bundle Arch默认为原来 template 的架构类型。若需修改,单击 Create new template 选择架构类型。若与编译的可执行文件架构不一致,则程序无法正常运行
    Create new template表示是否在创建新的 Bundle 模板。首次创建容器时,应当勾选;若非首次创建,并且 Local Bundle 指定了一个已存在模板的 Bundle 路径,则该选项可不勾选
    Multi libraries默认勾选 BASIC,会在 config.json 中添加容器运行的基础 lib 库的 mount 映射。VSOA 、JSRE 、QT 和 SSHD 选项,表示是否在 config.json 中添加 VSOA 、JSRE 、QT 和 SSHD 的宿主机的 mount 映射。配置 sshd 时,需注意开发使用的 RealEvo-IDE 需更新到 6.1.0 版本及以上。若提示缺失秘钥,详见 创建容器 Bundle 启动 ssh 服务流程
    Parameter用于设置所创建容器的默认启动参数,容器启动时会默认执行该启动参数
  3. 在打包导出界面的右侧区域,选择需要打入容器镜像包的目标路径(该范例为如图所示 "/rootfs/apps" 路径),然后在左侧工程目录中,双击需要打包到容器镜像包的文件(如 thermal_server 可执行文件),即可将文件导出到容器镜像包的目标路径中。导出文件后,单击 Next,进入打包目标界面。

  4. 在打包目标界面,参考表 2 配置相关参数,并单击 Finish 进行打包。

    表 2 打包参数说明

    参数是否必选说明
    Tarball Path容器镜像包的目标存放路径
    Tarball Name容器镜像包的文件名称,以 .tar 结尾
    Name镜像名称
    Tag镜像版本,默认为 latest
  5. 如下图所示,提示 ECS Export success 则表示打包成功,此时在 Tarball Path 对应目录下已打出容器镜像包。如果要立即上传镜像至目标仓库,则单击确定,在容器推送设置界面设置远端仓库 URL 和登录用户名、密码等信息进行上传;否则请单击取消,完成镜像打包。

步骤 6:上传 SylixOS App 微服务镜像

  1. 在 RealEvo-IDE 上方菜单栏中选择 Window > Preferences,在 Preferences 界面单击 ECS Registry Server,在 Registry Server 输入框中输入本地 ECSM 镜像仓库地址 http://127.0.0.1:3000,然后单击 Apply and Close,保存并关闭配置界面。

  2. 在上方导航栏中选择 Tools > Push Container Image,打开上传镜像界面。

  3. 在上传镜像界面,单击 File System,选择导出的镜像文件,并将 Name 设置为“thermal_server”,然后单击 OK ,开始上传镜像。

  4. 上传过程中 Console 会有以下输出,提示 Push success 则表示上传成功。

  5. 双击电脑桌面的 ECSM 快捷图标,在 ECSM 左侧菜单栏中,单击镜像管理 > 镜像仓库,在镜像仓库页面可以看到上传的镜像。

文档内容是否对您有所帮助?
有帮助
没帮助