2016-05-06 14 views
1

私は基本的にリダイレクトするサービスの設計に関する問題に取り組んでいます。Openresty:2つの非同期タスクを作成する

リクエストリンクにはいくつかのパラメータ(abc.com/param1=v1 & param2 = v2)が含まれます。 は私が

  1. が、私は、の値に応じて渡されたいくつかのparams(xyz.com/p1=v2)のリンクをフォーマットし で別のドメインにユーザーをリダイレクトする必要があると言う、このリンク上の2つのタスクを実行する必要があります、 param1、この手順はできるだけ早く行う必要があります

  2. 何らかの処理後にリンクの詳細を自分のDBに保存する必要があります。

これをnginx + lua(openresty)+(RedisまたはMongodb?)の組み合わせで行う予定です。

2つは関係のないタスクなので、私はそれを分割して非同期で行うことを計画しています。

リダイレクトの最初のタスクとして、ngx.redirect( "/ link")がそのような場合に適しているようです。 しかし、リダイレクトコールは現在のリクエストの処理を終了します。

これらの2つのタスクを独立させるにはどうしたらよいでしょうか?リダイレクトは可能な限り高速に実行され、2番目のタスクの完了を待つべきではありません。

+0

たぶんストアリンクの詳細を使用するウィッヒディレクティブを知るためのopenrestyマニュアルを参照してくださいデータを静かに処理し、あなたが望むものを何でもしてください。 – user6245072

+0

返信いただきありがとうございます。別のスレッドで保存を行い、このジョブを別のスレッドに与える方法を教えてください。 –

+0

私は知りません、申し訳ありません:3 – user6245072

答えて

0

別のスレッドで保存を行い、このジョブを別のスレッドに与える方法を教えてください。

うん、もちろんあなたeasltことができ、あなたはperfecctly $ URLがあなたの内のURLであるあなたがngx.location.capture($url)で呼び出す必要がありceperateスレッド、中Order of lua module directive、その後、メイクのためのあなたはMongoDBのプロセスを理解する必要があり、すべての最初の場所ブロック:

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のワーカー)でコードを作成します。

のPlsはその後、ユーザーをリダイレクトする、いくつかの変数/テーブルに(access_by_lua、log_by_lua ...)

希望このヘルプ:)

+1

私は誰がそのグラフィックの著者または出典を尋ねるかもしれません "ルワモジュールディレクティブの命令"私はそれが非常に教育的であると思って、私はソースからより多くを見たいと思います。 (単純なGoogle検索では結果が得られませんでした) – danielgpm

+0

画像のソースは、openresty/ngx-lua-moduleの公式githubリポジトリです。https://github.com/openresty/lua-nginx-module –

+1

Hmm私は何十回もそのページにいましたが、私はそれを見逃していました。ありがとう – danielgpm