SWFを動かしてみる
なんかまわりがきちんとブログ書いているのを見て、たまには書いてやろうと思った次第です。訳あって、AWS Simple Work Flowを動かして色々検証しています。SWFを一言でいうなら、非同期かつノンブロッキングなやりとりが含まれる複数コンポーネント間でのワークフローを比較的楽に書くためのサービス。それなりに奥が深いのと、実際に日本語の情報が皆無なので、ひとまず動かすところまででも晒してみようと思います(先に続くかわからない・・・)。
動かす言語はJavaにするので、他言語の人はすまん。ちなみにフレームワークも利用します。AWSが出しているFlow Frameworkで、こいつはSWFを使うのを(多分)楽にしてくれる。SWF自体はワークフローサービス(というかワークフローに伴う状態管理サービスが実態に近い)なので、HTTPコールさえできればどの言語からも利用可能ではあるはず。ただし多分大変。誰かRubyとかPythonでやってる人がいたらぜひコードとかみたいです。
Flowのベーシックな仕組み
Flow FrameworkはJavaのAPTとAOPライブラリであるAspectJを使って、コードの自動生成とコードのバイトコードエンハンスを行います。なので、まずAPTおよびAspectJが動くようにEclipseの設定を行う必要があります。詳細はこちらを見てくださいな。
コンセプト図、これだけだと何かわからなそうだけど・・・w
環境構築
さて、まずは環境構築をします。必要なものは、
余談
というか次回書く余力がない場合のため(多分ないw)。Workflowの実装で、
@Override public void doSome() { client.hoge(); client.foo(); }
と書くと、並列で実行され、hoge()とfoo()の順序はその順番にはならない。順序通りにしたい場合は、
@Override public void doSome() { Promise<Void> hoge = client.hoge(); executeFoo(hoge); } @Asynchronous void executeFoo(Promise<Void> hoge) { client.foo(); }
こうです。PromiseはFutureみたいなもんだけど、ノンブロッキングで結果が戻るまで待たないFlowでの基本単位です。