CQRS アーキテクチャで次の問題をどのように解決しますか。
- Order というドメイン エンティティがあります。
- 注文を処理する必要があります。
- 新しく作成された注文は未処理で、処理キューにあります
- 各注文を複数回処理してはなりません。
- 未処理の注文を照会する (物事の側面を読み取る) 複数の Windows サービスがあります。
では、各注文が 1 つのサービスだけで処理されるようにするにはどうすればよいでしょうか?
サービスが Command を発行するようにしますStartOrderProcessing(order)
。バージョンが異なるため、別のサービスがこの注文の処理をすでに開始している場合、このコマンドはドメインで失敗します。
ただし、Command は本質的に非同期であるため、サービスはどのようにして障害を認識するのでしょうか?
サービスは読み取りモデルをポーリングして、注文のステータスが処理中に変わったかどうかを確認する必要がありますか? しかし、別のサービスのコマンドではなく、独自のコマンドのためにステータスを変更したサービスはどうなるでしょうか?
UL:
- 注文: 私のシステムの注文は、メールボックスのグリーティングを更新するユーザー要求を表します。
- メールボックス: 携帯電話に電話をかけたときに電話に出なかった場合、メッセージを残すためにメールボックスにリダイレクトされます
- あいさつ: メールボックスに到着すると、ビープ音が鳴った後にメッセージを残すようにというメッセージが表示されます。このテキスト (あなたのメッセージではありません!) がグリーティングです。
- 有効化: メールボックスに新しいグリーティングを設定するプロセスは、有効化と呼ばれます。グリーティングがアクティブ化されています。
- キャリア: 携帯電話サービスを提供する会社 (T-Mobile など)。
注文を処理する際の手順:
- 事前に録音されたサウンド ビットからグリーティングを作成します。これは、メールボックスが関連付けられているキャリアによって異なります。
キャリア固有のワークフローを実行して、メールボックスでグリーティングを有効にします。このワークフローには次の要素があります。
2.1. メールボックス
2.2 を呼び出します。DTMF トーンを使用してメールボックス メニューをナビゲートする
2.3. メールボックスが送信する特定の音声要素 (確認のビープ音など) の認識
2.4. 1で作成したグリーティングを再生するワークフローはキャリアごとに異なるため、Windows Workflow Foundation ワークフローとして定義されます。
成功時:
3.1. アクティベーション コールの記録を保存する
3.2. 成功をメールでユーザーに通知エラー時:
4.1. 失敗したアクティベーション コールと失敗の理由の記録を保存する
4.2. これが最初の試行であった場合は、X 分後に再試行するように注文をスケジュールし
ます。 4.3. これが 2 回目の試行であった場合は、失敗についてメールでユーザーに通知します