0

私が取り組んでいるアプリケーションの一部には、添付ファイルを含む電子メールのダウンロード、各添付ファイルのバーコードの検出、識別子のスキャン、識別子を使用したデータベースへのデータの挿入が含まれます。

これまでのところ、メッセージ バスの使用は Pub/Sub に限定されており、実際に Sagas を使用する必要はありませんでした。ただし、上記の各ステップが同じ関連プロセスの一部であり、プロセスの一部が失敗した場合の耐久性が必要な場合、Saga は適切でしょうか?

私たちのプロセスの詳細と、佐賀をどのように使用できると私が考えたかは次のとおりです。

  1. Quartz ジョブは、PDF 添付ファイルを含む電子メールをダウンロードするために使用されます。Quartz ジョブは、Connectorに​​関する情報を含むを使用しTenantます。このテナント情報は、Saga がテナント固有のリソース (データベース/ストレージ) と対話できるようにするために必要になります。
  2. PDF 添付ファイルごとに、"Process Document" Saga を開始して、テナント情報とドキュメント自体 (メッセージ バスがこれを永続化できると仮定) またはディスク上のファイルのパスを渡します。ソース電子メールの添付ファイルごとに Saga が開始された後、コネクタはメールボックスから電子メールを削除/アーカイブして、再度処理されないようにすることができます。

その後、各 Saga は次のタスクを実行します。

  1. 添付ファイル/ファイルからバーコードを読み取ろうとします。バーコードの検出に失敗した場合は、手動で処理できるように、指定された場所にファイルをアップロードする必要があります。これで佐賀が完成します。バーコード検出された場合、データベース識別子をデコードします。
  2. Order識別子を使用して、関連するレコードをデータベースから ロードし、存在する場合:
    1. URI を返す指定された場所にファイルをアップロードします
    2. OrderDocumentファイル URI を参照する新しいレコードをデータベースに挿入します。
  3. OrderDocumentBundle注文にリンクされたすべてのドキュメントを含む単一のファイルであるを更新します。そのため、 newが作成されたら、関連するOrderDocumentをロードし、 new からページを追加する必要があります。OrderDocumentBundleOrderOrderDocument
  4. 佐賀が完成。

バンドルを更新しようとする複数のメッセージが表示される可能性があるため、最終的なバンドル プロセス中の同時実行の問題が懸念されます。バンドル ファイルが使用可能になるまで Saga が待機するようにして、Saga が完了するようにする必要があります。

4

1 に答える 1