ssiot-core

module
v1.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 11, 2023 License: Apache-2.0

README

概述

核心库提供配置读取、数据库访问、缓存访问、日志、HTTP服务等基础组件

初始化

环境初始化

env.SetupConfig("./settings.yml")

初始化环境之后即可通过env中的对象使用配置、数据库、缓存、日志等功能

HTTP服务器启动

启动HTTP服务器,会自动进行环境初始化,不比再执行env.SetupConfig()方法,只需要执行:

httpserver.InitEngine("./settings.yml")

HTTP服务器基于gin进行封装,关于如何使用路由、中间件请看下文中HTTP服务器部分。

配置

获取标准配置

标准配置是预先在核心库定义的一套固定格式的配置,可通过“标准配置对象”读取标准配置。如果不是按照标准配置格式配置的内容,通过“标准配置对象”获取不到。

// 获取数据库连接配置
fmt.Prinln(env.DefaultConfig.Database.Source)

按路径获取配置

标准配置或者用户在yml配置文件中添加的其它非标准配置,均可通过“配置操作对象”获取。

// 获取数据库连接配置
env.ConfigOperator.Get("settings.database.source")

数据库

使用DB对象

核心库根据配置文件中的配置初始化“Db对象”,“Db对象”是一个gorm对象,gorm的标准接口均可使用

// 查询数据表
env.Db.Table("sys_svc").Select("instance_id, path, bin, arg").Rows()

使用gin上下文中的DB对象

如果启动了HTTP服务,核心库会自动将“Db对象”注入到gin的contex中,可在context中获取并使用

 // 在gin上下文中获取db对象
 db := c.Get("db")
 db.Table("sys_svc").Select("instance_id, path, bin, arg").Rows()

缓存

如果配置文件中配置了redis节点,“缓存对象”使用redis管理缓存;如果没有配置redis节点,缓存对象使用内存管理缓存,支持线程安全。

 // 设置一个100s过期的缓存并获取
 cache := env.Cache
 cache.Set("token", "mytoken", 100)
 cache.Get("token")

日志

核心库根据配置文件初始化“日志对象”。如果“driver”为“default”,“日志对象”使用标准库作为底层日志库,如果“driver”为“zap”,日志对象使用“zap”作为底层日志库。

 // 设置一个100s过期的缓存并获取
 myLog := env.Log
 h1 := myLog.WithFields(map[string]interface{}{"key1": "val1"})
 h1.Trace("trace_msg1")
 h1.Warn("warn_msg1")
 h1.Infof("Info message %s", message)

HTTP服务器

启动HTTP服务器非常简单,并且可以设置自定义路由和中间件。

// 如有需要,向内核注册自己需要的中间件,自定义的中间件不在核心库中
// 可选 限流
httpserver.RegisterMiddlewareFunction(middleware.Sentinel())
// 可选 自动增加requestId
httpserver.RegisterMiddlewareFunction(middleware.RequestId(pkg.TrafficKey))
// 可选 请求日志记录到数据库
httpserver.RegisterMiddlewareFunction(middleware.LoggerToFile())
// 可选 自定义错误处理
httpserver.RegisterMiddlewareFunction(middleware.CustomError)
// 可选 http header中的缓存设置
httpserver.RegisterMiddlewareFunction(middleware.NoCache)
// 可选 跨域处理
httpserver.RegisterMiddlewareFunction(middleware.Options)
// 可选 http header中的安全设置
httpserver.RegisterMiddlewareFunction(middleware.Secure)

// 必须,初始化引擎
httpserver.InitEngine(_var.ConfigFile)
// 可选,初始化JWT验证方法组,JWT的部分回调可以自定义,
// 回调方法在ssiot-device项目的common目录中可以找到
jwtMiddleware, _ := middleware.AuthInit()
// 必须,向内核注册自己的业务模块路由,如不使用中间件,请使用InitRouters方法
httpserver.InitAuthRouters(Routers, jwtMiddleware)
// 必须,启动HTTP服务器
_ = httpserver.Run()

路由定义方式如下:

func Routers(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
	router := r.Group("/auth")
	{
		router.POST("/modify", handler)
		router.POST("/delete", handler)
		router.GET("/get", handler)
	}
}

Directories

Path Synopsis
tool
Package config is an interface for dynamic configuration.
Package config is an interface for dynamic configuration.
tool/encoder
Package encoder handles source encoding formats
Package encoder handles source encoding formats
tool/loader
package loader manages loading from multiple sources
package loader manages loading from multiple sources
tool/reader
Package reader parses change sets and provides config values
Package reader parses change sets and provides config values
tool/secrets
Package secrets is an interface for encrypting and decrypting secrets
Package secrets is an interface for encrypting and decrypting secrets
tool/secrets/box
Package box is an asymmetric implementation of config/secrets using nacl/box
Package box is an asymmetric implementation of config/secrets using nacl/box
tool/secrets/secretbox
Package secretbox is a config/secrets implementation that uses nacl/secretbox to do symmetric encryption / verification
Package secretbox is a config/secrets implementation that uses nacl/secretbox to do symmetric encryption / verification
tool/source
Package source is the interface for sources
Package source is the interface for sources
tool/source/file
Package file is a file source.
Package file is a file source.
tool/source/memory
Package memory is a memory source
Package memory is a memory source
facade
env
api
debug/log
Package log provides debug logging
Package log provides debug logging
msg
sms

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL