# BaseService/gateway `BaseService/gateway` 剑鱼网关服务。为剑鱼网站商品标准化,提供统一权限校验,资源扣减。 ## 网关配置 ## ## ## 服务注册与服务发现 服务注册与发现依赖`go.etcd.io/etcd/client/v3`库。 > 服务注册 注册时向etcd中put `scheme/serverCode@serverAddr` key并设置租期 - `scheme` 默认为 `etcd:///com.gateway` - `serverCode` 为服务code,在系统中需要唯一 - `serverAddr` 为服务ip+端口 服务注册[例子](https://bp.jydev.jianyu360.cn/BaseService/gateway/src/master/core/node/hellowrold/main.go) 。服务已注册,但服务不可用可能有以下操作*造成。但服务有重试机制,并常识可用节点,不会造成影响。 ```go 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`中所有的服务节点。当有服务启动或关闭时,网关程序能够实时进行服务节点的增加与删除。 ```go //创建节点发现,并持续监听 watchNode := node.NewNode(etcdNode1,etcdNodes2,..) go watchNode.NewWatcher(ctx, resolver) ``` ## 反爬虫策略配置 ```json 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 临时黑名单时长 ```