仓库地址
本项目是基于官方 Apache APISIX 模块进行了修改和扩展,详细信息请查看官方仓库 https://github.com/api7/apisix-nginx-module。
简介
本项目通过修改官方的 apisix-nginx-module,实现了在 OpenResty 中实现 HTTP 和 TCP 服务之间的共享内存复用,利用 lua_shared_dict
实现了在不同子系统之间的数据共享。
实现目标
本项目的核心目标包括:
-
统一重复实现:优化
ngx_http_lua_module
和ngx_stream_lua_module
的重复实现,通过更加优雅的代码重构,简化了 lua-resty-core 的代码库,提升了整体性能并减小了二进制文件的体积。 -
跨子系统数据共享:长期以来,开发者期待的在
http {}
和stream {}
子系统之间共享lua_shared_dict
功能得以实现。在实现此功能的过程中,还进行了相关代码的清理和优化。
使用步骤
为了使用本项目,您需要按照以下步骤进行配置和部署:
-
下载和补丁:
cd apisix-nginx-module/patch ./patch.sh ThePathOfYourOpenRestySrcDirectory
这一步将会把修改后的代码集成到您的 OpenResty 源代码中。
-
配置和编译:
cd openresty-1.19.9.1 ./configure --add-module=../apisix-nginx-module/src/meta make -j10
在这一步中,您需要配置 OpenResty 并编译安装,确保将
../apisix-nginx-module/src/meta
添加为模块。
示例配置
以下是一个简单的示例配置,用于验证您的部署是否成功:
lua {
lua_shared_dict dogs 1m;
}
http {
server {
listen 9991;
location /t {
content_by_lua_block {
ngx.shared.dogs:set("foo", "abcd")
print(ngx.shared.dogs:get("foo")) -- 输出 "abcd"
}
}
}
}
stream {
server {
listen 9992;
content_by_lua_block {
print(ngx.shared.dogs:get("foo")) -- 输出 "abcd"
}
}
}
这个配置展示了如何在 HTTP 和 TCP 子系统中使用 ngx.shared.dogs
共享字典,确保了数据在不同子系统之间的可靠性和一致性。