上面是我们的nginx设置,引入了redis模块,用于存储API哀求数目,接下来,我们在gateway/intercept.lua中实现API哀求数目统计的处理赏罚逻辑:
- local function increseNum(key)
- -- get key from rediskey
- local _redis = require "resty.redis"
- local redis = _redis:new()
- redis:set_timeout(100)
- local ok, err = redis:connect(ngx.var.redis_host, ngx.var.redis_port)
- if not ok then
- ngx.log(ngx.ERR, "failed to connect to redis: ", err)
- return nil
- end
- if ngx.var.redis_auth then
- local ok, err = redis:auth(ngx.var.redis_auth)
- if not ok then
- ngx.log(ngx.ERR, "failed to authenticate: ", err)
- return nil
- end
- end
- if ngx.var.redis_db then
- local ok, err = redis:select(ngx.var.redis_db)
- if not ok then
- ngx.log(ngx.ERR, "failed to select db: ", ngx.var.reddb, " ", err)
- return nil
- end
- end
- local res, err = redis:incr(key)
- if not res then
- ngx.log(ngx.ERR, "failed to incr key: ", key ,", ", err)
- return nil
- end
- if res == ngx.null then
- ngx.log(ngx.ERR, "key ", key, " not found")
- return ngx.null
- end
- local ok, err = redis:close()
- if not ok then
- ngx.log(ngx.ERR, "failed to close: ", err)
- end
- return res
- end
- increseNum(ngx.var.redis_incrkey)
就这样,我们实现了API网关的一个小成果,其他成果实现,就靠各人去探索了。今朝市面上成熟的API网关实现方案有许多,回收openresty 开拓出的api网关,好比较量风行的kong、orange等, 各人可以自行相识。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|