简单随机负载均衡插件


local ngx         = ngx

-- 插件源数据配置
local schema = {
    -- 类型
    type = "object",
    -- 插件接收的配置参数
    properties = {

    },

    minProperties = 1,
    -- 附加属性
    additionalProperties = false,
}

-- 插件名
local plugin_name = "xiaoyou"

-- 插件的配置信息
local _M = {
    -- 版本
    version = 0.1,
    -- 优先级
    priority = 2500,
    -- 插件的类型
    type = 'auth',
    -- 插件名字
    name = plugin_name,
    -- 插件的参数
    schema = schema,
}

-- 在balancer阶段来处理请求
-- 常见的阶段:init, rewrite,access,balancer,header filer,body filter 和 log 阶段
function _M.access(conf, ctx)
    -- 引入resty的http请求模块
    local http = require("resty.http")
    -- 新建一个http请求
    local httpc = http.new()
    -- 这里我们置随机数总数
    math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9)))
    -- 负载均衡的节点列表
    local hosts = {"192.168.123.131:81","192.168.123.131:82","192.168.123.131:83","192.168.123.131:84"}
    -- 发送一个http请求
    local resp, err = httpc:request_uri("http://"..hosts[math.random(1,4)], {
        method = "GET",
        path = "/",
        headers = {
            ["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36"
        }
    })
    -- 如果请求为空,那么就返回错误信息
    if not resp then
        ngx.say("request error :", err)
        return
    end
    -- 返回请求结果
    ngx.say(resp.body)
    -- 关闭http请求
    httpc:close()
end

-- 返回插件对象
return _M

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录