服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。
但是对openresty和lua不是太熟悉,还请指教。
谢谢~: ) 😊 --
现在打算用openresty开发一个跳转服务,不知道有没有这样一个优化的方法呢,请指教~服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。曾经尝试用 thread.spawn 和 thread.wait,但是尝试后发现不行,读文档才知道 ngx.redirect 会终止执行然后尝试用location.capture,代码如下:location = /test { expires epoch; content_by_lua_block { --解析参数等... --... --... ngx.location.capture("/savedb") ngx.redirect("http://www.google.com") }}location = /savedb { expires epoch; content_by_lua_block { --模拟延时 ngx.sleep(5) ngx.log(ngx.DEBUG, "db saved suc") }}发现也不行,访问 /test 发现依然需要等待。请问openresty和lua能达到我想要的效果吗?可能这个要求有点怪,但是对openresty和lua不是太熟悉,还请指教。谢谢~: ) 😊
Hello在 2016年9月2日 上午11:27,小司马 <lee...@gmail.com>写道:服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。你可以用 ngx.timer.at 把 2 放入后台执行 但是对openresty和lua不是太熟悉,还请指教。建议你多看看文档,磨刀不误砍柴工 :) 谢谢~: ) 😊 --
你可以这样做,拿到请求后把请求体存在本地一个队列里面,直接用 proxy_pass 转发到外部域名。保存到本地队列后,再写个脚本来做解析处理就可以了。在 2016年9月2日星期五 UTC+8上午11:27:20,小司马写道:现在打算用openresty开发一个跳转服务,不知道有没有这样一个优化的方法呢,请指教~服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。曾经尝试用 thread.spawn 和 thread.wait,但是尝试后发现不行,读文档才知道 ngx.redirect 会终止执行然后尝试用location.capture,代码如下:location = /test { expires epoch; content_by_lua_block { --解析参数等... --... --... ngx.location.capture("/savedb") ngx.redirect("http://www.google.com") }}location = /savedb { expires epoch; content_by_lua_block { --模拟延时 ngx.sleep(5) ngx.log(ngx.DEBUG, "db saved suc") }}发现也不行,访问 /test 发现依然需要等待。请问openresty和lua能达到我想要的效果吗?可能这个要求有点怪,但是对openresty和lua不是太熟悉,还请指教。谢谢~: ) 😊
Hello! 2016-09-03 10:05 GMT-07:00 小司马: > 嗯,用消息队列肯定是一种解决方式,但是想看看能否依赖openresty本身达到目的。 > 提到队列。最新版的 OpenResty(1.11.2.1)现在自己就支持共享内存队列: https://github.com/openresty/lua-nginx-module#ngxshareddictlpush Regards, -agentzh
发件人: hao dong发送时间: 2016-09-03 13:31收件人: openresty主题: [openresty] Re: 请问可以异步执行两个任务吗?你可以这样做,拿到请求后把请求体存在本地一个队列里面,直接用 proxy_pass 转发到外部域名。保存到本地队列后,再写个脚本来做解析处理就可以了。在 2016年9月2日星期五 UTC+8上午11:27:20,小司马写道:现在打算用openresty开发一个跳转服务,不知道有没有这样一个优化的方法呢,请指教~服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。曾经尝试用 thread.spawn 和 thread.wait,但是尝试后发现不行,读文档才知道 ngx.redirect 会终止执行然后尝试用location.capture,代码如下:location = /test { expires epoch; content_by_lua_block { --解析参数等... --... --... ngx.location.capture("/savedb") ngx.redirect("http://www.google.com") }}location = /savedb { expires epoch; content_by_lua_block { --模拟延时 ngx.sleep(5) ngx.log(ngx.DEBUG, "db saved suc") }}发现也不行,访问 /test 发现依然需要等待。请问openresty和lua能达到我想要的效果吗?可能这个要求有点怪,但是对openresty和lua不是太熟悉,还请指教。谢谢~: ) ???? --
现在打算用openresty开发一个跳转服务,不知道有没有这样一个优化的方法呢,请指教~服务接收一个请求并带一些参数,比如 mydomain.com/?param1=aaa¶m2=bbbb,我的服务需要做两件事:1. 跳转到一个外部域名,并带上相同的参数。希望这一步能越快执行越好2. 解析请求的参数,将请求信息保存到后端DB因为这两个任务无关,所以想要一个请求达到后,能马上执行第一步的跳转请求,而不需要等待第二步的请求完成再跳转,第二步肯定有一些网络和DB延迟。曾经尝试用 thread.spawn 和 thread.wait,但是尝试后发现不行,读文档才知道 ngx.redirect 会终止执行然后尝试用location.capture,代码如下:location = /test { expires epoch; content_by_lua_block { --解析参数等... --... --... ngx.location.capture("/savedb") ngx.redirect("http://www.google.com") }}location = /savedb { expires epoch; content_by_lua_block { --模拟延时 ngx.sleep(5) ngx.log(ngx.DEBUG, "db saved suc") }}发现也不行,访问 /test 发现依然需要等待。请问openresty和lua能达到我想要的效果吗?可能这个要求有点怪,但是对openresty和lua不是太熟悉,还请指教。谢谢~: ) ????
Hello! 2016-09-03 10:05 GMT-07:00 小司马: > 嗯,用消息队列肯定是一种解决方式,但是想看看能否依赖openresty本身达到目的。 > 提到队列。最新版的 OpenResty(1.11.2.1)现在自己就支持共享内存队列: https://github.com/openresty/lua-nginx-module#ngxshareddictlpush Regards, -agentzh --