apisix源码分析-插件的运行(7)

apisix源码分析-插件的运行(7)

插件的运行

插件的 init_worker 监控了 etcd 的 pluglns 。

插件列表发生发生变化时通过 load 函数重新加载插件 。

load 函数获取启用的插件列表后,清理本地的插件,使用 load_plugin 函数通过 pcall(require, pkg_name)重新引入插件

插件在每个阶段通过 common_phase(phase_name) 来执行。执行流程如下:

  • 执行公共插件
  • 插件调用阶段 run_plugin(phase,plugins,api_ctx)
  • api_ctx.script_obj : 当使用有向无环图来做编辑时,apisix 会将图转换为脚本存储到 script_obj 变量中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local function common_phase(phase_name)
local api_ctx = ngx.ctx.api_ctx
if not api_ctx then
return
end
-- 执行公共变量
plugin.run_global_rules(api_ctx, api_ctx.global_rules, phase_name)

if api_ctx.script_obj then -- 执行有向无环图编辑的脚本
script.run(phase_name, api_ctx)
return api_ctx, true
end

return plugin.run_plugin(phase_name, nil, api_ctx) -- 执行插件列表
end

apisix源码分析-插件的运行(7)

https://beixiu.net/apisix-source-7/

作者

张巍

发布于

2023-08-22

更新于

2023-08-22

许可协议

评论