按步搭建簡單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,使用用例和模式來定義消息內容
相關文章
相關標籤/搜索