Windowsワークフローにはちょっと新しくなっています:)外部イベントに基づいて確実にワークフローインスタンスを作成するにはどうすればよいですか?
高可用性を備えたワークフローホスト環境を設計したいと思います。別のハードウェア上に最低2つのWFランタイムホストを同じ持続性またはトラッキングSQLデータベース。
いくつかの外部イベント(つまり、一部のデータが別のアプリケーションによってDB内で更新される)に基づいて、新しいワークフローインスタンスを非同期で作成できるパターンを探しています。イベントごとに、私はちょうど1つのワークフローインスタンスを作成する必要があり、そのインスタンスが作成されるホストは関係ありません。また、イベントとワークフローインスタンスが実際に作成されるまでの時間には柔軟性があります。
私が検討している解決策の1つは、WFホスト上にWCFインターフェイスがあり、何らかの種類のロードバランサの背後に配置することです。 WCFコールを行うために「イベント」を発しているシステムのどの部分にまでさかのぼります。
\すべてのWFホストがダウンしているか、または利用できない場合、イベントが「失われている」可能性があるので、これは本当にうれしいことです。また、私が望むように負荷を管理することはできません。私は、小さな期間にたくさんの出来事があるかもしれない状況を想定していますが、後でそれらの出来事を処理することは完全に容認できます。
私はイベントをどうにかして保持し、イベントの作成とイベントの処理を切り離す必要があると思います。
これらのイベントをMSMQまたはSQL Serverの単純なイベントテーブルに入れて、WFホストが定期的にキューをポーリングするだけで、実行可能なソリューションが得られますか?ポーリングはこのような汚い言葉だと思われますが...
ここでNServiceBusと耐久性のあるメッセージングは便利でしょうか?
洞察力があれば幸いです。データベースが共有ファイバチャネルストレージとクラスタ化され
補遺
。ネットワークも冗長化されます。 WFランタイムインスタンスがフェールオーバーするには、共通の永続性サービス(この場合はSQLバックエンド)を指す必要があります。それは、高可用性、ない総クラッシュリカバリ:)
MSDN article on WF Reliability and High Availabilty
また、WFランタイムの各インスタンスはまったく同じビットを実行している必要がありますので、アップグレードは、同時にそれらすべてを降ろすことが必要になります。私は、システム全体をダウンさせることなく、必要に応じてそれを実行できるという考えが好きです。