按步搭建简单IoT微服务(2)

总体架构

image

这章节咱们将为系统创建一个简单的前端界面。首先安装一些依赖环境并运行起来,按照下面的步骤开始:前端

若是尚未准备好,能够先在获取的代码仓库 micro-services-tutorial-iot 下运行npm install命令,完成以后运行以下命令:node

  1. cd frontend/api
  2. node index.js

打开浏览器(推荐使用chrome、firefox),输入地址http://localhost:10001. 能够看到一张图表,简单吧。git

尝试目标0

接下来将开始创建数据库。这步将借助于Docker,若是没有镜像,可使用一行命令获取:github

docker pull tutum/influxdb

如何运行influxdb容器能够参考文档: https://hub.docker.com/r/tutu...chrome

难点是运行起influxDB容器,一旦成功运行,能够在浏览器中查看influx的网页界面。docker

目标0实现步骤

  1. 使用以下命令启动容器shell

    docker run -d -p 8083:8083 -p 8086:8086 tutum/influxdb
  2. 在step1/services/influx/文件夹中有简便启动influx容器的命令集
  3. 使用命令获取容器中的IP地址数据库

    docker-machine ip default
  4. 在浏览器中输入http://<dockermachineip>:8083/打开influx控制台

-p 参数用于将容器的808三、8086端口暴露给宿主机;npm

-d 参数告知docker运行后台模式json

当在本地运行docker容器时,特别留意每一个单独的虚拟机使用各自的IP地址(尤为是Mac系统、Windows系统)

使用docker kill命令能够随时中止容器

尝试目标1

image

目前数据库已经运行,接下来将建立微服务用于读写数据库。已经编写好了序列化服务代码,位于step1/services/serializer文件夹下

当前目标是编写一个小脚本,运行后可将温度数据写进influx数据库。当服务启动后,可使用下面的命令将数据点提交给服务程序。

curl -X POST -d '{"role": "serialize", "cmd": "write", "sensorId": "1", "temperature": 32}' http://localhost:10000/act  --header "Content-Type:application/json"

提示 若是检查serializer.js源文件 ,能够发现使用了下列环境变量:

  • INFLUX_HOST
  • serializer_PORT

初始化脚本应确保正确设置了上述变量数据

经过浏览器中的influx网页界面输入下列查询语句,能够检查数据点被真实写入influx中

use temperature;
select * from temperature;

目标1实现步骤

  1. 在step2/services/influx文件夹包含influx容器启动脚本
  2. 在step2/services/serializer文件夹包含序列化服务源代码
  3. 使用 step2/services/serializer/run.sh (Windows用run.bat)脚本启动服务
  4. 使用 step2/services/serializer/testWrite.sh (windows用testWrite.bat)脚本发送测试数据
  5. 使用influx控制台查看数据点

注意 序列化程序是一种seneca1微服务。Seneca做为独立层可实现多种传输机制,包括TCP, HTTP, RabbitMQ, Redis, NATS等。在本教程中,使用Json格式数据经过HTTP传输机制。

尝试目标2

image

下一步是链接前端和序列化服务,实如今前端图表中读取传感器发送的数据。

序列化服务对应的更新后前端程序位于 step2/frontend.

面临的挑战是启动Influx数据库、前端程序、序列化服务。须要编写脚本实现启动前端服务和序列化服务。

当启动这两个服务,使用testWrite.sh脚本发送数据到influx数据库后,就能够在前端页面查看。

注意 如检查更新后的前端代码,可发现以下环境变量

  • PROXY_HOST
  • serializer_PORT
  • frontend_PORT

在打开前端前,须要设置上述变量。

目标2实现步骤

  1. 使用step3/services/influx下的脚本启动influx容器
  2. 运行脚本 step3/services/serializer/run.sh (windows下用 run.bat) 启动序列化服务
  3. Start the frontend with the script 运行脚本step3/frontend/run.sh (or run.bat)启动前端界面
  4. 在浏览器中输入 http://localhost:10001/显示前端页面
  5. 使用脚本step3/services/serializer/testWrite.sh (windows下用 testWrite.bat)发送一些测试数据
  6. 前端页面中应出现数据点的表格

尝试目标3

image

如今系统只有3个模块,但已经很难管理。在这步中,面临的挑战是让系统经过Fuge运行。Fuge是一种微服务开发环境,帮助简化应对本地进程和docker容器

在 step3/fuge 包含两个文件:

  • compose-dev.yml - 使用docker compose格式指定系统所用的进程等
  • fuge-config.json - fuge全局配置文件

面临的挑战是使用fuge终端运行系统,能够查看fuge相关文档https://github.com/apparatus/...。 系统启动费后,可使用脚本step3/services/serializer/testWrite.sh (windows下用testWrite.bat)检查运行状态。前端页面图表可直观展现数据。

提示 必须先中止以前全部进程及容器

提示 确认使用 npm install -g fuge命令安装了fuge.

提示 可使用 fuge shell 开启fuge终端

目标3实现步骤

  1. step4/fuge 文件夹包含fuge终端的配置
  2. 启动fuge

    fuge shell fuge/compose-dev.yml
  3. 启动全部服务

    start all
  4. 打开 http://localhost:10001 查看图表
  5. 使用脚本 step4/services/serializer/testWrite.sh 发送数据到序列化服务

注意 Fuge用于关联进程和dock 容器,使用以下机制:

  • 注入环境变量到每个进程
  • 启动内部代理,在进程和容器间进行桥接

本系列文章:


  1. Seneca是Node.js微服务框架开发工具。它的目的在于复制架构师和开发人员的服务想法,提供方法把代码融入到由模式所触发的逻辑行为中,这是根据用例所做用的模型。一旦被定义,模式就能够轻松转为API,使用用例和模式来定义消息内容
相关文章
相关标签/搜索