开发微服务应用
本文以开发一个温度上报微服务为例,介绍如何基于软件工厂提供的 RealEvo-IDE 集成开发工具进行微服务应用的开发、编译、打包,并上传至 ECSM。更多微服务开发指导,请参见 翼辉分布式软总线 教培文档。
前提条件
已参考 搭建开发环境 完成 RealEvo-IDE 的安装与配置,并创建、编译了 SylixOS ECS Base 和云原生 SDK。
操作步骤
步骤 1:创建 SylixOS App
打开 RealEvo-IDE,在上方导航栏中单击 File > New > SylixOS App。
在 SylixOS App 创建工程界面的 Project name 中填入工程名,如 thermal_server,单击 Next,进入 SylixOS Base 配置界面。
在 SylixOS Base 配置界面,单击 SylixOS Base Project 右侧的 File System 或 Workspace,选择 搭建开发环境 时创建的 SylixOS ECS Base 工程,单击 Finish。
在生成的
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:配置头文件路径
- 在
thermal_server
工程上单击右键,选择 Properties,进入工程属性配置页面。 - 在工程属性配置页面左侧导航栏中,单击 SylixOS Project > Compiler Setting,进入编译配置界面。在编译配置界面上方的标签中,单击 Include Path 进入头文件配置界面。
- 在头文件配置界面中,单击右侧的 Workspace,添加云原生 SDK 中的 VSOA 库头文件所在目录 libjson 和 libvsoa,并单击 Apply,保存配置。
步骤 3:配置库文件链接
在工程属性配置页面左侧导航栏中,单击 SylixOS Project > Linker Setting,进入链接配置界面。单击右侧 Name 依次添加如下三个库名称,并单击 Apply,保存配置。
在链接配置界面,单击 Library Path 页签,切换至库路径配置界面。在库路径配置界面右侧单击 Workspace,选择添加如下库路径。配置完成后,单击 Apply and Close,保存并关闭配置界面。
步骤 4:编译 SylixOS App
- 在
thermal_server
工程上单击右键,选择 Build Project 编译工程,或者单击 RealEvo-IDE 工具栏中的 🔨 进行编译。 - 编译过程中 Console 会有以下输出,提示 Success 则表示编译成功。对应的可执行文件
thermal_server
将生成在工程的 Debug 目录下。
步骤 5:打包 SylixOS App 微服务镜像
在
thermal_server
工程上单击右键,选择 Container > ECS Package,启动打包向导。在打包向导界面,参考表 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 否 用于设置所创建容器的默认启动参数,容器启动时会默认执行该启动参数 在打包导出界面的右侧区域,选择需要打入容器镜像包的目标路径(该范例为如图所示 "/rootfs/apps" 路径),然后在左侧工程目录中,双击需要打包到容器镜像包的文件(如
thermal_server
可执行文件),即可将文件导出到容器镜像包的目标路径中。导出文件后,单击 Next,进入打包目标界面。在打包目标界面,参考表 2 配置相关参数,并单击 Finish 进行打包。
表 2 打包参数说明
参数 是否必选 说明 Tarball Path 是 容器镜像包的目标存放路径 Tarball Name 是 容器镜像包的文件名称,以 .tar
结尾Name 是 镜像名称 Tag 是 镜像版本,默认为 latest 如下图所示,提示 ECS Export success 则表示打包成功,此时在 Tarball Path 对应目录下已打出容器镜像包。如果要立即上传镜像至目标仓库,则单击确定,在容器推送设置界面设置远端仓库 URL 和登录用户名、密码等信息进行上传;否则请单击取消,完成镜像打包。
步骤 6:上传 SylixOS App 微服务镜像
在 RealEvo-IDE 上方菜单栏中选择 Window > Preferences,在 Preferences 界面单击 ECS Registry Server,在 Registry Server 输入框中输入本地 ECSM 镜像仓库地址
http://127.0.0.1:3000
,然后单击 Apply and Close,保存并关闭配置界面。在上方导航栏中选择 Tools > Push Container Image,打开上传镜像界面。
在上传镜像界面,单击 File System,选择导出的镜像文件,并将 Name 设置为“thermal_server”,然后单击 OK ,开始上传镜像。
上传过程中 Console 会有以下输出,提示 Push success 则表示上传成功。
双击电脑桌面的 ECSM 快捷图标,在 ECSM 左侧菜单栏中,单击镜像管理 > 镜像仓库,在镜像仓库页面可以看到上传的镜像。