stream动态lua配置
1. 功能描述
该模块允许通过 /api/v1/config/stream_lua 动态配置接口, 动态设置stream模块的balancer_by和content_by的内容。
其中balancer_by用于配置在upstream块内,content_by配置在server块内。
2. 依赖模块
stream动态lua功能依赖模块:
load_module modules/njt_stream_lua_module.so;
load_module modules/njt_stream_dyn_lua_module.so; 特殊说明:njt_stream_lua_module.so要在njt_stream_lua_module.so上面。
3. 配置说明
load_module modules/njt_stream_lua_module.so;
load_module modules/njt_stream_dyn_lua_module.so;
stream {
...
server {
lua_package_path "$prefix/lualib/lib/?.lua;/usr/local/njet/modules/?.lua;;";
lua_package_cpath "$prefix/lualib/clib/?.so;;";
...
}
}4. 调用样例
4.1 API说明
查询接口:
GET http://IP+port/api/v1/config/stream_dyn_lua修改接口:
PUT http://IP+port/api/v1/config/stream_dyn_lua4.2 通过PUT接口添加content_by
发送
curl -X PUT http://127.0.0.1:8081/api/v1/config/stream_dyn_lua -d'{
"upstreams": [
{
"name": "backend_s1",
"balancer_by": ""
},
{
"name": "backend_s2",
"balancer_by": ""
},
{
"name": "backend_s3",
"balancer_by": ""
}
],
"servers": [
{
"listens": [
"0.0.0.0:22224"
],
"serverNames": [
""
],
"lua": {
"content_by": "njt.say(\"test lua ok\")"
}
}
]
}'返回
{"code":0,"msg":"success."}4.3 通过PUT接口添加balancer_by
发送
curl -X PUT http://127.0.0.1:8081/api/v1/config/stream_dyn_lua -d'{
"upstreams": [
{
"name": "backend_s1",
"balancer_by": "\n local balancer = require \"njt.balancer\"\n local ip = \"192.168.0.5\"\n local port = 18080 \n local ok, err = balancer.set_current_peer(ip, port)\n if not ok then\n njt.log(njt.ERR, \"failed to set upstream: \", err)\n return njt.exit(njt.ERROR)\n end\n "
},
{
"name": "backend_s2",
"balancer_by": ""
},
{
"name": "backend_s3",
"balancer_by": ""
}
],
"servers": [
{
"listens": [
"0.0.0.0:22224"
],
"serverNames": [
""
],
"lua": {
"content_by": "njt.say(\"test lua ok\")"
}
}
]
}'返回
{"code":0,"msg":"success."}4.4 通过GET接口查看stream模块配置的动态lua
发送
curl -X GET http://127.0.0.1:8081/api/v1/config/stream_dyn_lua 返回
{
"upstreams": [
{
"name": "backend_s1",
"balancer_by": ""
},
{
"name": "backend_s2",
"balancer_by": ""
},
{
"name": "backend_s3",
"balancer_by": ""
}
],
"servers": [
{
"listens": [
"0.0.0.0:22224"
],
"serverNames": [
""
],
"lua": {
"content_by": "njt.say(\"test lua ok\")"
}
}
]
}