WSO2ESBのシーケンス呼び出しの間に状態を保存する正しい方法については不思議でした。言い換えれば、シーケンスSを呼び出すスケジュールされたタスクがある場合、反復0の終わりに、私はString変数をいくつか格納したい(それをIDと呼ぶ)し、次にこのIDを最初に読みたい反復1の途中)、等々。WS2ESB:シーケンス呼び出し間の状態を保存する
より正確には、既存のサービスであるTwilioから新しいSMSメッセージのリストを正確に取得したいと考えています。ただし、Twilioは選択した日のみメッセージを受け取ることができます。つまり、特定のメッセージIDよりも最後にチェック/新しかったので、私に新しいメッセージだけを伝える方法はありません。したがって、Twilioにクエリを実行し、に新しいメッセージを渡す予定のタスクを作成したいと思います。これを行うために、私のシーケンスはTwilioに問い合わせを行い、返されたメッセージのリストを調べ、前の呼び出しですでに報告されたメッセージを破棄する必要があります。これを行うためには、異なるタスク/シーケンス呼び出しの間にある状態を格納する必要があります。つまり、シーケンスの最後に、最新のメッセージのIDを現在のバッチに格納する必要があります。その後、このIDを後続の呼び出しで使用して、前の呼び出しですでに報告されたメッセージを判別することができます。
私はDBLookupとDB Reportメディエータを使用することができましたが、パフォーマンスはあまり高くなく、過度の(データベースを使用して単一の文字列を格納する)ようです。一方、Classメディエータはシングルトンとしてインスタンス化されているので、この状態を管理し、私のサービスに送信されるメッセージのリストをフィルタリングするカスタムClassメディエータを作成することができます。私はこれがうまくいくと確信していますが、これが道のりであるか、私が逃したよりエレガントな解決策があるのだろうかと思いました。
ありがとうございます。私は状態のスレッドの安全性を確保する必要がありますね。状態が単なる文字列の場合は正常に動作すると思われますが、一般的に状態が複雑な場合は、おそらく同期が整っていると思われます。あるいは、フレームワークは、複数のスレッドによってmediateメソッドが並列に実行されないことを保証しますか? –