|
9 mesiacov pred | |
---|---|---|
.idea | 3 rokov pred | |
common | 1 rok pred | |
core | 9 mesiacov pred | |
etc | 1 rok pred | |
resources | 2 rokov pred | |
.gitignore | 3 rokov pred | |
README.md | 2 rokov pred | |
gateway.exe | 1 rok pred | |
gaway.sql | 3 rokov pred | |
go.mod | 1 rok pred | |
go.sum | 1 rok pred | |
main.go | 1 rok pred |
BaseService/gateway
剑鱼网关服务。为剑鱼网站商品标准化,提供统一权限校验,资源扣减。
##
服务注册与发现依赖go.etcd.io/etcd/client/v3
库。
服务注册
注册时向etcd中put scheme/serverCode@serverAddr
key并设置租期
scheme
默认为 etcd:///com.gateway
serverCode
为服务code,在系统中需要唯一serverAddr
为服务ip+端口服务注册例子 。服务已注册,但服务不可用可能有以下操作*造成。但服务有重试机制,并常识可用节点,不会造成影响。
server := g.Server()
// 向网关注册表注册服务。*此步骤应在服务启动后注册
// NewNode可传入etcd节点,默认http://127.0.0.1:2379
closeNotify, err := node.NewNode(etcdNode1,etcdNode2...).Register(serverCode, serverPort)
if err != nil {
panic(err)
}
go func() {
server.Run()
}()
// 阻塞主进程,接受退出消息。关闭服务,从注册表中删除。
// kill -9 信号接受不到,*会有2~3秒延迟。
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
closeNotify()
服务发现
服务发现是网关程序依赖etcd
中watch
监听系统scheme
中所有的服务节点。当有服务启动或关闭时,网关程序能够实时进行服务节点的增加与删除。
//创建节点发现,并持续监听
watchNode := node.NewNode(etcdNode1,etcdNodes2,..)
go watchNode.NewWatcher(ctx, resolver)
checkIdBlock 是否开启用户session校验
idThreshold 用户请求阈值 [[a,b],[c,d],[m,n]] a秒b次、c秒d次请求出验证码,并清空次阈值内容;m秒n次出验证码,不清除阈值内容,每超出idFreq次,出现一次验证码
idTimeRange 阈值有效时长
idFreq 超出最大阈值后,每超出idFreq次,出现一次验证码
idMax 超出此阈值后直接进入临时黑名单
idMaxBlockTimes 临时黑名单超出此阈值后直接进入永久黑名单
checkIpBlock 是否开启用户ip校验
ipThreshold 用户请求阈值 [[a,b],[c,d],[m,n]] a秒b次、c秒d次请求出验证码,并清空次阈值内容;m秒n次出验证码,不清除阈值内容,每超出idFreq次,出现一次验证码
ipTimeRange 阈值有效时长
ipFreq 超出最大阈值后,每超出idFreq次,出现一次验证码
ipMax 超出此阈值后直接进入临时黑名单
ipMaxBlockTimes 临时黑名单超出此阈值后直接进入永久黑名单
vcodeErrorTimes [a,b] a秒验证码出错b次,进入临时黑名单
tempBlockTime 临时黑名单时长