欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

apisix 实现简单随机负载均衡插件

程序员文章站 2022-06-03 20:30:03
...

本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问

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
相关标签: 软件使用