マイクロサービス アーキテクチャのコンテキストでは、同期(おそらくRESTベース)メカニズム。
以下に示すように、そのコンテキストを使用して、非常に単純化された注文システムを想像してください。
および次のメッセージ フロー:
- 注文は何らかのソース (Web/モバイルなど) から行われます。
- 注文サービスは注文を受け付け、
CreateOrderEvent
- InventoryService は に反応し、
CreateOrderEvent
いくつかの在庫作業を行い、完了したら を発行しInventoryUpdatedEvent
ます。 - 次に、Invoice サービスは に反応し
InventoryUpdatedEvent
、請求書を送信して、EmailInvoiceEvent
すべてのサービスが稼働しており、喜んで注文を処理しています。誰もが満足しています。その後、Inventory サービスが何らかの理由でダウンします
イベントバス上のイベントが「ノンブロッキング」方式で流れていると仮定します。つまり、メッセージは中央のトピックに発行されており、サービスがそれから読み取られていない場合はキューに積み上げられません (私が伝えようとしているのはイベントバスです。イベントがバスで発行された場合、それはこの時点で使用されているメッセージング プラットフォーム/テクノロジは無視してください)。これは、Inventory サービスが 5 分間ダウンした場合、CreateOrderEvent
その間にイベント バスを通過する が「なくなった」か、Inventory サービスに表示されないことを意味します。それらのイベント。
私の質問は次のとおりです: 在庫サービス (およびシステム全体) は、どのようにして注文が取りこぼされたり処理されなかったりしないように状態を復元しますか?