Camel ベースの小さなプロセス エンジンの PoC に取り組んでいます。要件は一連の結果ステップを実行できることであり、それぞれの実行に数時間かかる可能性があります。この場合、非同期通信スタイルは当然の選択ですが、「プロセス」部分を正しくするのに苦労しています。
外部システムにメッセージを送信するときは、完了を待つ必要があります。時間がかかる可能性がある限り、メッセージを送信した後に具体的なステップの処理を停止し、完了メッセージが返されたら新しい「ジョブ」を開始することを考えています。したがって、文字通り、各ステップの処理は、同じ JMS キューで始まる Camel ルートとして処理され、コンテンツベースのルーターは、メッセージのヘッダーまたはそのコンテンツに基づいて、実行する具体的なロジックを決定します。
ただし、問題は、メッセージが失われる可能性をどのように回避するかです。たとえば、具体的なステップで、メッセージを送信して処理を停止しています。何らかの理由で外部システムがメッセージを処理しなかったため、私のシステムは通知を受け取りません。これは、他のコンポーネントがメッセージを生成してウェイクアップしない限り、プロセスがスタックしていることを意味します。
また、システムがいつでもシャットダウンできる限り、再起動後もメッセージの処理を続行するロジックを組み込む必要があります (これは、ある種のメッセージの永続性、再配信、およびトランザクション管理戦略を意味します)。
この問題はすべて積み重なるため、経験豊富な Camel チャンピオンに、Camel を使用してそのような種類のロジックを設計する方法について提案を提供してもらいたいと思います。専用の BPM 製品または ESB を使用すると、この問題をより簡単に処理できることはわかっていますが、ソリューションを肥大化させたくありません。
特にソリューションの簡素化に役立つ Camel の機能に関して、アドバイスを歓迎します。