【java团队用OpenResty】1、在windows构建开发环境

来源:互联网 发布:货代软件系统 编辑:程序博客网 时间:2024/06/05 09:11

作为多年的Java架构师,前一阵子奉命基于OpenResty搭建API网关,手上的资源都是Java开发人员,面对这种情况如何应对,下面推出一个系列文章,介绍我们的经验,供有类似需求的团队借鉴。

OpenResty是基于基于Nginx的Lua开发平台,利用Linux的epoll模式进行高效的接入访问。对于我们这种整天在window下开发的人,如果使用vim开发工具,天天登录到linxu上进行开发,就是噩梦一般。所以先介绍我们在windows下面构建OpenResty开发环境作为开篇。

我们希望达到的效果是能够运行纯lua程序,然后能够运行引用openresty库的lua

一、开发工具准备

1、OpenResty已经发布了window的二进制编译版本,以此搭建为本地开发。

2、Notepad++并插件安装NppFTP,JSON Viewer,Light Explorer

3、ngx_openresty-1.9.7.1-win32(其中的luajit作为作为临编译器使用,本身也可以做临时环境)

二、运行Lua的操作步骤

首先将ngx_openresty-1.9.7.1-win32安装到某个目录,注意安装到非中文,路径不带空格的目录下。
C:\ngx_openresty-1.9.7.1-win32
先创建一个空白文件,输入print("hello"),这里用到了Light Explorer插件进行文件管理。

然后在Notepad++菜单中选择>运行


输入cmd /k C:\ngx_openresty-1.9.7.1-win32\luajit.exe "$(FULL_CURRENT_PATH)"
这里解释一下$(FULL_CURRENT_PATH)在Notepad++里代表当前文件的完成路径,包括文件名。
先选择运行,就会在终端上输出“hello”


然后选择保存,定义一个快捷键。

这样,后续执行就可以不用命令行了


最后,如果有多个库引用,或者自己写的module,放在C:\ngx_openresty-1.9.7.1-win32\lua即可!
这样,我们就能够编辑纯Lua的代码,并随时运行,同时Notepad++提供了Lua的语法高亮,写Lua没有问题了。


三、运行OpenResty的Lua

折腾了半天,只是能运行纯Lua,没啥意思,我们要能够运行ngx.say的环境。答案在resty.bat上,resty.bat相当于是一个执行resty的perl脚本的批处理文件。章亦春据说Perl造诣中国排名前五,在OpenResty中也有大量的Perl使用,resty.bat就是一个在perl脚本,主要是动态创建一个ngnix 项目目录,并根据模板创建相应的nginx.conf。
因为notepad++下面$(FULL_CURRENT_PATH)变量返回的是windows的反斜杠,导致perl执行有问题,因此模仿resty.bat写一个新的批处理文件。
首先,创建resty-janus.bat

@rem = '--*-Perl-*--@echo offset var=%1set var=%var:\=/%perl -x -S resty_janus.perl %var%if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperlif %errorlevel% == 9009 echo You do not have Perl in your PATH.if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
我们演示一下创建一个共享内存字典的Lua脚本,

首先需要对perl脚本中的nginx.conf模板进行编辑。copy resty 到resty_janus.perl,从Line 176行开始就是nginx.conf 模板内容,添加了:

lua_shared_dict sys_info 1m;
然后就可以执行下面的脚本

local sys_shm = ngx.shared.sys_infolocal ok, err = sys_shm:safe_set("apis_status", "Starting")if not ok then    ngx_log(ngx.ERR, "SYS_SHM set status 'Starting' error. ", err)    returnendprint ('status: ' .. sys_shm:get("apis_status"))
最后,在notepad++中,运行cmd /k C:\ngx_openresty-1.9.7.1-win32\resty_janus.bat "$(FULL_CURRENT_PATH)"就能够正常执行了。