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