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()
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐