kong网关源代码研究及调试

前段时间一直研究kong网关,发现kong源码的整体结构还是比较清晰的。核心的目录结构如下:
Api目录-----kong对外发布的管理API,通过8001端口发布。
Cmd目录----kong的命令行,如start、stop等
cluster_events目录------集群事件的策略配置文件,如数据库集群。
Db目录------数据库的操作,如数据操作、结构定义、数据库迁移等
Log目录------日志存储,平台分三类日志,access/admin_access/error
Pdk目录------设计工具集,比如log日志记录工具/client 客户端信息收集工具
Plugins目录----插件目录,系统自带的和自定义的插件都在这里
Resty目录----Resty和SSL配置相关文件
SSL目录------SSL的证书
Tool目录-----工具目录,比如集群配置、调试打印Table、DNS配置等
Templates目录—模板文件nginx模板、yml模板和默认模板。

通过kong的管理工作台查看对应的插件如下:
在这里插入图片描述

因为对这个通过【/plugins】管理API返回的数据不太满意,比如在路由服务、业务服务、消费方上使用的插件返回都是ID值,无法做到一目了然。因此要改变管理API返回的数据结构,我们找到插件对应的管理API文件,api/routes/plugins.lua 和 api/endpoints.lua。
观察这两个代码我们发现,endpoints.lua是包含一些通过公共方法生成的API,如分页查询业务对象、查询某个特定的业务对象、插入对象、更新对象。而像plugins.lua是一些特有的API,如查看已激活的插件:/plugins/enabled。
而我们要修改的是/plugins返回的消息,所以对应应该修改 api/endpoints.lua。

if tostring(schema.name)“plugins” then
local daoroute = db[“routes”]
local daoservice = db[“services”]
local daoconsumer = db[“consumers”]
for key,value in pairs(data) do
for key1,value1 in pairs(value) do
if tostring(key1)
‘route’ and type(value1)‘table’ then
local entity, _, err_t =daoroute[“select”](daoroute, { id = unescape_uri(value1.id)}, nil)
value1.name=entity.name
end
if tostring(key1)
‘service’ and type(value1)‘table’ then
local entity, _, err_t =daoservice[“select”](daoservice, { id = unescape_uri(value1.id)}, nil)
value1.name=entity.name
end
if tostring(key1)
‘consumer’ and type(value1)==‘table’ then
local entity, _, err_t =daoconsumer[“select”](daoconsumer, { id = unescape_uri(value1.id)}, nil)
value1.username=entity.username
end
end
end
end
从代码看很简单,判断Schema的name,如果为plugins,则查数据库并将值赋给对象的Name或者UserName.kong网关经过重启,通过管理端重新获取数据后。
在这里插入图片描述

我们看到业务服务、路由服务、消费方的ID都变成了名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值