「少なくとも1回」は処理されるという安心感

AP4R-0.2.0 をリリースしました。
リリースメモは id:kiwamu さんのところにあります。
http://d.hatena.ne.jp/kiwamu/20061018/1161157874

今回の目玉機能は、SAF (store-and-forward) になります。
平たく言うと、

  • クライアントアプリケーションから、メッセージをキューに入れるときに、
  • まずクライアント側で、一旦データベースに突っ込んでおいて、
  • それが終わったら、実際にメッセージングサーバーに送信!

という処理フローでキューイングができるようにした、ということです。

以下のような場合に使うと安心してアプリケーションを書くことが出来るようになります。
シナリオ

オンラインの本屋さんを作っているとして、
注文を受け付けて、発送処理を行うとします。
発送がすごく面倒なロジックのため、そこは非同期においやりたい。
  1. 同期処理にて、注文を受け付け (とっても大事なことなので、トランザクション有りでデータベースをいじる)
  2. 注文内容はデータベースに入れておく
  3. ついでに、非同期の発送処理を「やんなきゃいけないよ」というメッセージだけデータベースに入れておく ここが SAF の S(store)
  4. ここまで来たら、注文と発送メッセージを「同時に」コミット
  5. 一息ついて、発送メッセージを実際にキューイング ここが SAF の F (forward)
  6. 注文処理は終わって、応答して
  7. そのうち非同期の処理はウラで回る

保障されることは、以下の2点

  1. 前処理(同期の処理)が行われない時には、後処理(非同期)も行われない
  2. 前処理が行われた時には、後処理のメッセージがどこかに残っている

まとめると、アプリケーションでデータベースのトランザクション機能を使って、メッセージングの信頼性を大きく上げることが出来る、ということでした。

これで安心して処理をメッセージに詰めて送ることが出来るようになりました。