Mule ESB は非同期メッセージングの並行処理
Mule ESB を、実際に使い始めているけど、なかなか、発想の転換が難しい、というのが実感。
inbound(受信) -> サービスコンポーネント -> outbound(送信)
という単純な仕組みを 連結していくだけなんだけどなあ。
手続き的に書きたくなる【アンチパターン】
最初の頃、ひっかかったのは、「手続き的」に設計する、アンチパターン。
個別のメッセージの処理、というより、「メッセージの集合」から、一件ずつ、順番に取り出しながら、処理していく、というバッチ処理の発想から抜け出せない。
並行処理
いま、苦戦しているのが、並行処理。
Mule ESB は、デフォルトで、
inbound したあとのメッセージ処理 4つのスレッドで並列処理
サービスコンポーネントの活性化 4つのスレッドで並列処理
outbound 4つのスレッドで並列処理
という方式になっている。
メッセージの到着順と、処理の順番、前後関係は、なにも保証されてない。
これを、前提とした、設計の頭になかなかきりかわらない。
あと、データベースへのコネクションが並列して発生するとか、わかってしまえば、あたりまえなんだけど、直感的には、単独の処理プロセスのイメージからヌケきれず、かなりつまづいている。
Mule ESB 自体は、かなり、軽量で、高トラフィックのメッセージ処理ができる手ごたえがある。
ところが、大量のメッセージを高速に並列処理できる Mule ESB のよさが、データベースアクセス、ファイルの読み書き、SMTP でのメール送受信とかがからんでくると、とたんに性能問題、容量問題、データや処理の一貫性問題にぶつかる。
現場で格闘しながら、必死に勉強中です。
サンプルプログラムみたいに、動いたら、おしまい、というわけにはいかない。