Openresty:完成两个异步任务

我正在处理一个有关服务设计的问题,基本上是重定向。

我收到的请求链接将包含一些参数(abc.com/param1=v1&param2=v2)。 我需要在这个链接上执行两个任务

  1. 我需要格式化链接并将用户重定向到另一个域与 一些参数传递(xyz.com/p1=v2),具体取决于,比如, param1 的值,此步骤应尽快完成

  2. 我需要在某些处理后将链接详细信息保存到我的数据库中。

我计划使用 nginx+lua(openresty)+(Redis 或 Mongodb?)组合来完成这个任务。

由于两个任务没有关联,因此我计划将其拆分为两个异步操作。 在重定向中,ngx.redirect("/link")似乎很适合这种情况。 但文档说重定向调用将终止当前请求的处理

我该如何使这两个任务独立并且重定向将尽可能快地发生,不应等待第二个任务完成。

点赞
用户2125067
用户2125067

可以由另一个线程进行存储,如何将此工作分配给另一个线程?

是的,当然可以。首先,您必须完全理解Lua模块指令的顺序,然后要将Mongodb处理过程分离到另一个线程中,您需要使用ngx.location.capture($url)调用它,其中$url是位置块中的网址:

location redirect/handling {
   ... //
   content_by_lua_file url/to/your/code/forRedirectHandling
   ngx.location.capture(mongo/save):

}

location mongo/save {
  content_by_lua_file url/to/mongodbHandlingdCode
}

ngx.location.capture()将指向第二个位置块,并使您的代码在另一个线程(nginx worker)中运行。

请参见openresty文档,以了解使用哪个指令(access_by_lua,log_by_lua ...)

希望能有所帮助 :)

2016-06-20 13:33:17