APISIX源码解析-执行阶段【stream_init_worker】
ngx_lua 模块执行顺序与阶段
stream_init_worker()
1、插件初始化
function _M.init_worker()
-- some plugins need to be initialized in init* phases
-- 获取当前请求的Nginx子环境(http或stream)。如果在http模块下,就返回字符串http;如果在stream模块下,则返回字符串stream。
if ngx.config.subsystem == "http" then
-- 初始化prometheus.exporter
require("apisix.plugins.prometheus.exporter").init()
end
-- load(http_plugin_names) and load_stream(stream_plugin_names)
-- 过程都一样,先清理内存,再插入,再按优先级排序
_M.load()
if local_conf and not local_conf.apisix.enable_admin then
init_plugins_syncer()
end
local plugin_metadatas, err = core.config.new("/plugin_metadata",
{automatic = true}
)
if not plugin_metadatas then
error("failed to create etcd instance for fetching /plugin_metadatas : "
.. err)
end
_M.plugin_metadatas = plugin_metadatas
end
2、stream初始化
function _M.stream_init_worker()
local router_ssl_name = "radixtree_sni"
-- stream route只包含ip、port
local router_stream = require("apisix.stream.router.ip_port")
router_stream.stream_init_worker(filter)
_M.router_stream = router_stream
local router_ssl = require("apisix.ssl.router." .. router_ssl_name)
router_ssl.init_worker()
_M.router_ssl = router_ssl
end
初始化/stream_routes 和 ssl
3、开启定时器,每秒
-- 如果使用yaml配置中心,开启定时器定时扫描配置文件
if core.config == require("apisix.core.config_yaml") then
core.config.init_worker()
end
4、初始化变量
-- 初始化balancer
load_balancer = require("apisix.balancer")
-- 初始化本地配置变量
local_conf = core.config.local_conf()