Gin中间件
Gin中间件内置中间件 func BasicAuth(accounts Accounts) HandlerFunc func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc realm:认证分组 func Bind(val interface{}) HandlerFunc //拦截请求参数并进行绑定 func ErrorLogger() HandlerFunc //错误日志处理 func ErrorLoggerT(typ ErrorType) HandlerFunc //自定义类型的错误日志处理 func Logger() HandlerFunc //日志记录 func LoggerWithConfig(conf LoggerConfig) HandlerFunc func LoggerWithFormatter(f LogFormatter) HandlerFunc func LoggerWithWriter(out io...
玩转 Router
Kubeedge - 5: 玩转 Router什么是 Router router 是 KubeEdge 中的一种通过实现 CRDs 来实现与边缘端进行MQTT通信的模式 在 KubeEdge 中通过 Rule 和 RuleEndPoint 实现了几种通信模式 配置开启 router云端(cloud) 开启router模式123# 如果你是通过pod安装的cloudcore 查看是否开启#可以通过kubectl edit pod <cloudcore_name> -n kubeedge 修改kubectl describe cm cloudcore -n kubeedge 1234....... router: enable: true....... 边缘端(edge) 开启eventbus和servicebus1vi /etc/kubeedge/config/edgecore.yaml 1234567891011121314151617metaManager: contextSendGroup: hub contextSendModule: webs...
玩转 Device twin
Kubeedge - 4: 玩转 Device twin什么是 Device twinDevice twin 设备的动态属性,在 KubeEdge 中的设备孪生 包含了desired value(期望值)和reported value(真实值) 在 KubeEdge 利用 Device Model 和 Device Instance 的机制,通过一套 Device Model 生成大量 Device Instance 的机制实现关联管理 Device Commpents in KubeEdge Membership Module 该模块主要负责绑定新加入的设备与指定的边缘节点(其实就是NodeSelector的体现)。比如温度传感器关联在边缘节点node-A上,蓝牙音箱关联在了节点node-B上,如果云端要控制蓝牙音箱,那就要把数据准确的推到node-B上 Twin Module 该模块主要负责所有设备孪生相关的操作。比如,设备孪生更新(device twin update)、设备孪生获取(device twin get)和设备孪生同步至云端(device twin syn...
部署安装EdgeMesh
Kubeedge - 3: 部署安装EdgeMesh什么是EdgeMesh EdgeMesh 作为 KubeEdge 集群的数据面组件,为应用程序提供了简单的服务发现与流量代理功能,从而屏蔽了边缘场景下复杂的网络结构 KubeEdge 基于 Kubernetes 构建,将云原生容器化应用程序编排能力延伸到了边缘。但是,在边缘计算场景下,网络拓扑较为复杂,不同区域中的边缘节点往往网络不互通,并且应用之间流量的互通是业务的首要需求,而 EdgeMesh 正是对此提供了一套解决方案 为什么要使用EdgeMeshEdgeMesh 满足边缘场景下的新需求(如边缘资源有限、边云网络不稳定、网络结构复杂等),即实现了高可用性、高可靠性和极致轻量化: 高可用性 利用 LibP2P 提供的能力,来打通边缘节点间的网络 将边缘节点间的通信分为局域网内和跨局域网 局域网内的通信:直接通信 跨局域网的通信:打洞成功时 Agent 之间建立直连隧道,否则通过中继转发流量 高可靠性 (离线场景) 元数据通过 KubeEdge 边云通道下发,无需访问云端 apiserver EdgeMesh 内部...
部署安装KubeEdge
Kubeedge - 2: 部署安装KubeEdgeKubeEdge 部署环境 在云端方面,我们需要:Kubernetes 集群 Kubernetes:在CPU:2G,运行内存2G以上 在边缘,我们需要:容器运行时,现在我们支持: Docker Containerd Cri-o Virtlet MQTT服务器(可选) 建议公网开放端口:9443、10252、10251、5353、20006、2701、9376、12345、2379、2380、6443、10000-10004 出现无法访问,第一时间考虑是否未开放相应端口号 1. 安装DockerDocker 一键shell脚本安装:安装实例中Docker版本19.03.51234567891011121314151617 yum install -y yum-utils \device-mapper-persistent-data \lvm2yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum ...
Linux部署Go
Linux部署Gobash一键部署bash地址 下载123456# 安装wget命令yum install -y wget# 在 ~ 下创建 go 文件夹,并进入 go 文件夹mkdir ~/go && cd ~/go# 下载的 go 压缩包wget https://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz 解压1tar -C /usr/local -zxvf go1.17.0.linux-amd64.tar.gz 添加到环境变量123456vi /etc/profile# 在/etc/profile最后一行添加export GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin# 保存退出后source一下source /etc/profile 验证GO1go version linux上运行Gin1234# 更换代理源export GOPROXY=https://mirrors.aliyun.com/goproxy/# 开启go modexport G...
整合sql和sqlx
整合sql和sqlxWhat is sqlx sqlx是Go语言内置database/sql的超集,它在优秀的内置database/sql基础上提供了一组扩展 Get sqlx go get github.com/jmoiron/sqlx Prepare sqlx1234567891011121314151617181920212223242526272829package mysqlimport ( "bluebell/setting" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")var db *sqlx.DB// Init 初始化MySQL连接func Init(cfg *setting.MySQLConfig) (err error) { // "user:password@tcp(host:port)/dbname" dsn := fmt.Sprintf("%s...
整合限流策略
整合限流策略限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数 常用的限流策略漏桶法 漏桶法限流很好理解,假设我们有一个水桶按固定的速率向下方滴落一滴水,无论有多少请求,请求的速率有多大,都按照固定的速率流出,对应到系统中就是按照固定的速率处理请求 uber-go/ratelimit实现 uber-go/ratelimit Example uber-go/ratelimit1234567891011121314151617181920212223242526272829// 漏桶法// 定义全局限流器对象var rateLimit ratelimit.Limiter// 在 gin.HandlerFunc 加入限流逻辑func leakyBucket() gin.HandlerFunc { prev := time.Now() return func(c *gin.Context) { now := rateLimit.Take() fmt.Println(now.Sub(prev)) // 为了打印时间...
整合管理配置 - viper
整合管理配置 - viper Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式 viper是一个配置管理的解决方案,它能够从 json,toml,ini,yaml,hcl,env 等多种格式文件中,读取配置内容,它还能从一些远程配置中心读取配置文件,如consul,etcd等;它还能够监听文件的内容变化 读取 json,toml,ini,yaml,hcl,env 等格式的文件内容 读取远程配置文件,如 consul,etcd 等和监控配置文件变化 读取命令行 flag 的值 从 buffer 中读取值 viper 读取配置文件的优先顺序,从高到低,如下: 显式设置的Set函数 命令行参数 环境变量 配置文件 远程k-v 存储系统,如consul,etcd等 默认值 Viper 配置key是不区分大小写的 Famous parsing library toml :https://github.com/BurntSushi/toml json : https://github.com/json-iterato...
整合热加载
整合热加载热加载 和 热部署 热加载:代码进行修改时,程序能重新加载(部分代码),减少手动编译 热部署:代码修改时,程序能重新加载(整个应用或容器),热部署比热加载更为强大 Go实现热加载工具库Air 彩色日志输出 自定义构建或二进制命令 支持忽略子目录 启动后支持监听新目录 更好的构建过程 Get Air go get -u github.com/cosmtrek/air How to use Air 进入到项目目录 生成.air.conf文件: 首先在当前目录下查找 .air.conf配置文件,如果找不到就使用默认的air -c .air.conf air_emxaple.conf:12345678910111213141516171819202122232425262728293031323334353637383940414243444546# [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件# 工作目录# 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下root...



