hello,小伙伴們,愛星物聯云平臺開源已發布一段時間了,這篇文章《愛星物聯開源版后臺定制開發簡介》介紹了愛星物聯開源版的后臺定制開發介紹。
可能有人會說,這純理論的內容,如果沒有深入去了解源代碼和相關工具,可能理解起來還是云里霧里,還是沒法下手定制開發吧?
別急,理論指導實踐來了。本文介紹基于API腳手架和微服務腳手架構建自定義的對應服務,以及自定義服務怎么與愛星物聯IoT平臺服務進行交互(內容屬于下圖紅色線框部分)。
為了方便演示和理解,先以一個最簡單的需求為例:
目標:給平臺增加一個產品功能項告警配置功能。
場景設想:一個可充電電池版設備,當電量過低時,需要在平臺端判定告警,而告警閾值因用戶而異,數值各有不同。
需求:實現告警配置(備注:判定告警和記錄告警的邏輯不在演示范圍),后臺需提供告警閾值的增刪改查接口。
如何實現上述功能?按照下面的流程走一遍試試。
01創建數據庫、數據表
經過簡單梳理設備狀態的相關內容,可在設備庫iot_device下創建數據表t_iot_device_alarm_config,數據表字段內容整理如下:
其中dev_id、dpid兩列創建唯一索引,創建完成后可進入下一步。
02數據庫操作代碼生成
在愛星物聯IoT平臺中,所有配置類業務全部采用了MySQL數據庫。
Go語言的MySQL數據庫ORM相關的框架,開源的有很多,功能基本相同。平臺使用了在國內備受歡迎的數據庫ORM框架gorm及其配套的gen代碼生成工具。
gen工具有定制部分功能,主要是對特定列名、駝峰方式,MySQL部分數據類型轉換做了特定修改定制,代碼已開源。
后臺的小伙伴們可以到https://github.com/ubases/gen找到定制的倉庫。
這個工具有打包exe,建倉庫代碼中的tool/mysql-to-model/gentool.exe,windows下的開發者可以直接使用,linux下的開發者可從源碼倉庫中下載gen代碼編譯工具。
iot_device數據庫對應的ORM包,在路徑iot_model/db_device下,進入該目錄后,可看到有gentoo.bat文件,打開該文件,內容如下:
rem 生成整個庫
..\..\tool\mysql-to-model\gentool.exe -dsn "root:iLmz8sCXjkTYuh@tcp(192.168.5.56:3306)/iot_device?charset=utf8mb4&parseTime=True&loc=Local" -outPath orm -modelPkgName model
rem 生成單元測試加 -withUnitTest true
rem 生成某個表,后邊加 -tables {table name}
將其中的數據庫用戶名、密碼、IP、端口部分改成實際部署環境的參數,然后執行gentoo.bat.如果環境和參數配置都正確,那么會在model和orm子目錄下,會生成很多go文件。仔細觀察,會發現,這兩個子目錄新生成1個名為
t_iot_device_alarm_config.gen.go的文件,這個2個文件就是我們新增加的表t_iot_device_alarm_config的所有公共代碼。
其中model目錄的t_iot_device_alarm_config.gen.go里邊包含t_iot_device_alarm_config表對應go結構體及映射關系.
orm目錄的t_iot_device_alarm_config.gen.go里邊包含該表的常用增刪改查操作方法。
Model目錄下的model包比較好理解,orm目錄下的orm包,每個表的操作方法一樣,不過只需要熟悉掌握其中的1個表的所有方案,即可掌握orm包下所有方法的用法。
03創建自定義服務骨架
在了解愛星物聯API和微服務腳手架的源代碼結構后,開源倉庫中的iot_demo_api_service是API的腳手架,自定義API服務可以基于這個腳手架進行開發。
倉庫中的iot_demo_service是微服務的腳手架。
愛星物聯IoT平臺有一條未明確說明的規則,Web、APP、小程序等的入口都是API類的服務,該類API服務對外提供http/websocket+json接口;API調用內部服務以及內部服務之間,全部是基于grpc+protobuf的接口。
為了演示需要,按照這個規則,基于iot_demo_api_service和iot_demo_service服務分別拷貝整個工程目錄到新的目錄,并改名為iot_my_api_service和iot_my_service(正式服務定制時請用正常名稱,這里演示,取名隨意),修改后的代碼結構見下圖(左側是腳手架,右側是自定義的API和微服務)。
拷貝完成后,開始進行包名和代碼修改。
進入iot_my_api_service目錄,挨個將go文件import的所有包名中的包含的iot_demo_api_service全部替換為iot_my_api_service。進入iot_my_service目錄,挨個將go文件import的所有包名中的包含的iot_demo_service全部替換為iot_my_service。改為后,進行簡單的編譯,確保編譯通過。
04微服務和API代碼生成和完善
開源倉庫中,類似iot_{XXX}_service的目錄中,都是一個個服務。這些服務結構看起來是不是很整齊的樣子,那是因為大部分增刪改查之類的代碼、部分實體、及RPC接口都是用工具生成,上一步用到的腳手架部分代碼也是這樣生成的。
代碼生成工具在tool/mysql-to-service路徑下。具體的用法可以參考README.md文件。
修改config.yaml配置文件
執行gen.bat
打開gen.bat文件,并修改為如下內容:
后邊--tableName 后邊加表名,也就是第一步創建的表的名字。
修改后運行,就會在gen目錄下,生成如下目錄結構的文件。
注意到上面有個proto目錄,工具生成了2個文件:
iot_device_alarm_config_model.gen.proto
iot_device_alarm_config_service.gen.proto。這2個文件里邊有定義grpc接口和消息結構。
本次生成的代碼,感興趣的開發者們可以仔細看看代碼結構,這里不貼代碼介紹了。
執行gengo.bat
這一步依賴上一步生成proto文件,這一步的目標是利用protoc工具將proto文件生成go語言代碼。
這一步比較簡單,不需要修改gengo.bat文件,執行執行即可。執行完成后,會在protosService下生成對應的go代碼,這個例子生成了4個文件:
iot_device_alarm_config_model.gen.pb.go
iot_device_alarm_config_model.gen.pb.micro.go
iot_device_alarm_config_service.gen.pb.go
iot_device_alarm_config_service.gen.pb.micro.go
將這4個文件拷貝到iot_proto/protos/protosService路徑下。
代碼拷貝
將gen目錄下的convert、entitys、handler、service目錄整體拷貝到iot_my_service下,覆蓋原來的文件。覆蓋后的目錄文件結構如下所示:
將entitys下的文件iot_device_alarm_config_entitys.gen.go拷貝到iot_my_api_service/controls/system/entitys下(這里演示放到了system模塊下,實際定制開發中請根據實際需要放到controls下的子模塊中)。
完成iot_my_service服務
●打開iot_my_service/handler/register_handler.go文件,把剛生成的handler注冊進去。
●進入bin/conf/open,復制一份iot_demo_service.yml,將其改名為iot_my_service.yml,并修改配置文件中的內容。重點是logfile和database下的內容,注意修改正確。
●打開源代碼
iot_my_service/config/config.go,修改配置文件為iot_my_service.yml。
●原來demo中的表config_dict_type在iot_config數據庫,現在切換到了iot_device數據庫,因此,需要刪除掉原來config_dict_type相關的內容。
●進入
iot_common/iotconst/service_name.go,給服務定義一個常量IOT_MY_SERVICE,并取個服務名,其它服務會根據這個服務名去微服務注冊中心找到地址信息。并在main.go中將服務名修改為新取得名稱,即將iotconst.IOT_DEMO_SERVICE修改為iotconst.IOT_MY_SERVICE。
●至此iot_my_service全部改造完成,可直接編譯運行。
完成iot_my_api_service服務
●定義rpc客戶端。進入rpc目錄打開globalService.go,修改為如下內容:
●進入iot_my_api_service/controls下,實現HTTP接口,這塊目前沒有代碼生成工具生成,可以仿照basedata開頭的文件,實現自己的api和service。代碼中可以使用上一步創建的客戶端接口,類似調用本地函數類似,調用接口方法。關于這塊的代碼生成,后續可能會推出。
●打開iot_my_api_service/router/router.go,注冊新實現的模塊的路由。如果共用demo提供的system則不需要重復注冊。
●仿照iot_my_service添加配置文件。
●修改config.go,將配置文件名稱改為第4步添加的配置文件。
●至此iot_my_api_service全部改造完成,可直接編譯運行。
經過以上步驟就完成了微服務和API服務代碼的基本定制,通過API接口調用微服務實現告警配置的增刪改查。其中基于腳手架的配置步驟有點多,但不復雜,熟練了這個過程是很快的,各位開發者小伙伴來試試吧~
審核編輯 黃宇
-
API
+關注
關注
2文章
1487瀏覽量
61833 -
腳手架
+關注
關注
0文章
6瀏覽量
5486 -
IOT
+關注
關注
186文章
4181瀏覽量
196278
發布評論請先 登錄
相關推薦
評論