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_lua

4.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\")"
      }
    }
  ]
}