5

Camel ベースの小さなプロセス エンジンの PoC に取り組んでいます。要件は一連の結果ステップを実行できることであり、それぞれの実行に数時間かかる可能性があります。この場合、非同期通信スタイルは当然の選択ですが、「プロセス」部分を正しくするのに苦労しています。

外部システムにメッセージを送信するときは、完了を待つ必要があります。時間がかかる可能性がある限り、メッセージを送信した後に具体的なステップの処理を停止し、完了メッセージが返されたら新しい「ジョブ」を開始することを考えています。したがって、文字通り、各ステップの処理は、同じ JMS キューで始まる Camel ルートとして処理され、コンテンツベースのルーターは、メッセージのヘッダーまたはそのコンテンツに基づいて、実行する具体的なロジックを決定します。

ただし、問題は、メッセージが失われる可能性をどのように回避するかです。たとえば、具体的なステップで、メッセージを送信して処理を停止しています。何らかの理由で外部システムがメッセージを処理しなかったため、私のシステムは通知を受け取りません。これは、他のコンポーネントがメッセージを生成してウェイクアップしない限り、プロセスがスタックしていることを意味します。

また、システムがいつでもシャットダウンできる限り、再起動後もメッセージの処理を続行するロジックを組み込む必要があります (これは、ある種のメッセージの永続性、再配信、およびトランザクション管理戦略を意味します)。

この問題はすべて積み重なるため、経験豊富な Camel チャンピオンに、Camel を使用してそのような種類のロジックを設計する方法について提案を提供してもらいたいと思います。専用の BPM 製品または ESB を使用すると、この問題をより簡単に処理できることはわかっていますが、ソリューションを肥大化させたくありません。

特にソリューションの簡素化に役立つ Camel の機能に関して、アドバイスを歓迎します。

4

2 に答える 2

2

CamelのBAMサポートは、長期的なプロセスサポート(タイムアウト、エラー処理シナリオなど)の一部を提供する必要があります。また、JMSトランザクションは、信頼性の高い/永続的なメッセージング要件などに役立ちます。

幸運を祈り、別のアプローチに着手した場合はお知らせください...

于 2011-06-02T16:34:09.327 に答える
2

クレームチェックパターンは、長時間実行される外部呼び出し間で状態を永続化するために最も適切であることをお勧めします。アウトバウンドメッセージを送信する前に、プロセスの状態をチェックインしてください。

外部プロセスからの非応答の検出を処理する1つの方法は、2つのメッセージを投稿することです。1つのメッセージは外部プロセスに送信され、別のメッセージは内部キューに送信されます。2番目のものをプロセスタイムアウトメッセージと呼びます。これは、相関IDと適切な有効期限だけの非常に小さなメッセージです。プロセスが外部プロセスから受信された場合、受信プロセスは相関IDを持ち、プロセスタイムアウトキューからメッセージを削除できます。外部プロセスが応答しない場合は、プロセスタイムアウトキューのデッドレターキューを、管理者に警告するか、クレームチェックの取得などの適切な自動アクションを実行するラクダルートに接続する必要があります。これにより、永続的な状態が可能になります。オーバーヘッドが最小限で、BPMツールがないため、単一障害点がありません。

于 2011-10-21T18:44:22.823 に答える