加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

微处事入门:Openresty实现API网关

发布时间:2019-09-25 00:57:07 所属栏目:教程 来源:热爱技术君
导读:观念先容 假如各人清晰网关这个观念,那就很轻易领略API网关,即全部API的进口。 从面向工具计划的角度看,它与外面模式相同,封装了体系内部架构。在单体应用架构中,没有「 API网关 」的观念,每个项目城市用到filter/过滤器之类的对象,filter的浸染就

上面是我们的nginx设置,引入了redis模块,用于存储API哀求数目,接下来,我们在gateway/intercept.lua中实现API哀求数目统计的处理赏罚逻辑:

  1. local function increseNum(key) 
  2.     -- get key from rediskey 
  3.     local _redis = require "resty.redis" 
  4.     local redis = _redis:new() 
  5.     redis:set_timeout(100) 
  6.     local ok, err = redis:connect(ngx.var.redis_host, ngx.var.redis_port) 
  7.     if not ok then 
  8.         ngx.log(ngx.ERR, "failed to connect to redis: ", err) 
  9.         return nil 
  10.     end  
  11.     if ngx.var.redis_auth then 
  12.         local ok, err = redis:auth(ngx.var.redis_auth) 
  13.         if not ok then 
  14.             ngx.log(ngx.ERR, "failed to authenticate: ", err) 
  15.             return nil 
  16.         end 
  17.     end 
  18.     if ngx.var.redis_db then 
  19.  local ok, err = redis:select(ngx.var.redis_db) 
  20.  if not ok then 
  21.  ngx.log(ngx.ERR, "failed to select db: ", ngx.var.reddb, " ", err) 
  22.  return nil 
  23.  end 
  24.  end 
  25.  local res, err = redis:incr(key) 
  26.  if not res then 
  27.  ngx.log(ngx.ERR, "failed to incr key: ", key ,", ", err) 
  28.  return nil 
  29.  end 
  30.  if res == ngx.null then 
  31.  ngx.log(ngx.ERR, "key ", key, " not found") 
  32.  return ngx.null 
  33.  end 
  34.  local ok, err = redis:close() 
  35.  if not ok then 
  36.  ngx.log(ngx.ERR, "failed to close: ", err) 
  37.  end 
  38.  return res 
  39. end 
  40. increseNum(ngx.var.redis_incrkey) 

就这样,我们实现了API网关的一个小成果,其他成果实现,就靠各人去探索了。今朝市面上成熟的API网关实现方案有许多,回收openresty 开拓出的api网关,好比较量风行的kong、orange等, 各人可以自行相识。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读