2016-08-16 4 views
1

2つのサービスを持っているとします。請求注文と1つのAPIゲートウェイが課金または注文作成のためにこれらのサービスへのリクエストをファンアウトすることがあります。マイクロサービスエコシステム内の個々のサービスにビジネスロジックを含める必要がありますか?

この新しい順シナリオを考える:

  1. ユーザーは、オーダーを作成(要求 - >休憩API)
  2. ユーザーの検証が
  3. Orderエンティティを行う必要があり
  4. 課金エンティティを作成する必要があります
  5. 通知する必要があります。

アプリケーションロジックはどこにあるべきですか?これらのサービスへの呼び出しを(残りのAPI内で)同期して行う必要がありますか?または各サービスは別のサービスを呼び出す責任がありますか?例えば:

新しいユーザ注文要求 - >のREST API - >注文を作成するためのサービスを呼び出す - >のREST API(成功した場合) - >(成功した場合は)

それとも

請求サービスを呼び出します

新しいユーザーオーダーリクエスト - > Rest API - >オーダー作成サービスを呼び出して、 - >レスポンスを返します。それから、注文サービスはそこから非同期的に物事を取りますか?

ありがとうございます!

+0

bullet 4が欠けていると思われますか? –

+0

@StephanL私はちょうど感謝したことに気づいた! – ipalibowhyte

答えて

1

あなたの質問は完全ではありませんが、私はタイトルから質問を推測しようとすることができます...

各コンポーネントが、それは自身のビジネス・ロジックだ持っている必要があり、部品(またはmicroservicesは)何も共有しない、完全に自律的である必要がコードなしデータなし。

コンポーネントは、イベントを追加して(メッセージングを使用して)何かを追加することができます。

意味がありますか?ここで

example in .net using NServiceBus

+0

それは理にかなっています!それで本当に注文申込みを作成するには、残りのAPIは注文サービス(その注文が作成された後に課金サービスを呼び出す注文サービス)へのその要求を扇形にする責任がありますか?非同期的に注文サービスを呼び出す代わりに、残りのAPI内のすべての請求サービスを呼び出すのですか? – ipalibowhyte

+0

ご迷惑をおかけして申し訳ありませんが、私はちょうど質問を更新しました! – ipalibowhyte

+1

エントリポイントが残りのAPI(つまり、クライアントがAPIにリクエストを送信する)の場合、APIは注文サービスにメッセージを送信し、別のメッセージを請求サービスに送信し、請求サービスは請求が成功したイベントを公開できます注文サービスは注文を有料としてマークします。 それは意味がありますか? –

1

新しいユーザ注文要求である - >のREST API - >レスポンスを返す - >は、注文を作成するためのサービスを呼び出します。それから、注文サービスはそこから非同期的に物事を取りますか?

同期的に処理する必要がない非同期の処理は、常に良いアイデアです。しかし、それは常に可能ではありません。たとえば、オーダーサービスからの応答と一緒に請求IDを返さなければならない場合、それは同期ユースケースでなければなりません。>レストAPI - - >注文を作成するためのサービスを呼び出す - >(成功した場合)のREST API -

新しいユーザ注文要求>(成功した場合は)を呼び出すあなたの事

請求サービスを呼び出しますこの説明のRest APIは、実際にはビジネスサービスです(注文を作成し、次に成功すると請求情報を作成するのはビジネスロジックです)。あなたのゲートウェイは非常に愚かでなければならず、私はそれらをあなた自身で書くべきではありません! There is plenty of gateway solution out there

ゲートウェイが注文(および注文のみ)サービスと通信すると仮定すると、請求サービスがこの注文の請求情報を作成する必要があることを知らせる何らかの方法が必要です。私はあなたの質問から、これが必ずしも同期的に起こる必要はないと仮定します。したがって、私はsean-farmarに同意します。何らかの種類の非同期通信を使用して、課金サービスにあなたが新しい注文を作成したことを知らせます。また、課金情報の作成が完了したら、請求サービスがメッセージを送信することも考慮してください。そのため、注文サービスはこの通知を受け取り、注文に請求書のIDを追加することができます。そして、このように、あなたは完全に非同期でいる:

  • 作成した課金情報
  • は順番にその情報をリンクし、
  • は、課金情報に順序をリンク。

これは非同期的に発生し、メッセージは何らかの形でバッファリングされる可能性があるため、両方のサービスの一方がもう一方のサービスをダウンさせることなく停止する可能性があります。そして一度彼らが再び生きるために来たら、彼らは未解決のメッセージを処理する必要があります!

ところで、アップデートとは、新しいバージョンのサービスを強制終了して開始することを意味します。つまり、システムやSLAの稼働時間に影響を与えずにサービスを安全に更新することができます。

それが役立ったかどうか教えてください。

関連する問題