「少なくとも1回」は処理されるという安心感
AP4R-0.2.0 をリリースしました。
リリースメモは id:kiwamu さんのところにあります。
http://d.hatena.ne.jp/kiwamu/20061018/1161157874
今回の目玉機能は、SAF (store-and-forward) になります。
平たく言うと、
- クライアントアプリケーションから、メッセージをキューに入れるときに、
- まずクライアント側で、一旦データベースに突っ込んでおいて、
- それが終わったら、実際にメッセージングサーバーに送信!
という処理フローでキューイングができるようにした、ということです。
以下のような場合に使うと安心してアプリケーションを書くことが出来るようになります。
シナリオ
オンラインの本屋さんを作っているとして、 注文を受け付けて、発送処理を行うとします。 発送がすごく面倒なロジックのため、そこは非同期においやりたい。
- 同期処理にて、注文を受け付け (とっても大事なことなので、トランザクション有りでデータベースをいじる)
- 注文内容はデータベースに入れておく
- ついでに、非同期の発送処理を「やんなきゃいけないよ」というメッセージだけデータベースに入れておく ここが SAF の S(store)
- ここまで来たら、注文と発送メッセージを「同時に」コミット
- 一息ついて、発送メッセージを実際にキューイング ここが SAF の F (forward)
- 注文処理は終わって、応答して
- そのうち非同期の処理はウラで回る
保障されることは、以下の2点
- 前処理(同期の処理)が行われない時には、後処理(非同期)も行われない
- 前処理が行われた時には、後処理のメッセージがどこかに残っている
まとめると、アプリケーションでデータベースのトランザクション機能を使って、メッセージングの信頼性を大きく上げることが出来る、ということでした。
これで安心して処理をメッセージに詰めて送ることが出来るようになりました。