2016-12-26 6 views
1

私は、メッセージングアーキテクチャを備えたマイクロサービス間の通信を解決しています。メッセージングアーキテクチャを使用してメッセージを送信者に送り返す方法は?

私は伝統的なアプリケーションを持っており、User,PostVideoモジュールがあるとします。

投稿とビデオを作成することはできますが、その前にユーザー名をユーザーIDに変換する必要があります。

enter image description here

私はmicroserviceにモジュールを分割したら、私はそれらを一緒に連鎖することはできません、我々は代わりに直接microservicesをご覧ください。

enter image description here

そして私は、IDに

をユーザ名を変換したい場合、私はとても良いこれまでのところ、メッセージング経由PostサービスにUserサービスを呼び出すことができます。

  • 私が変換されたユーザーIDを受けるにはどうすればよい:

    enter image description here

    しかし、ここで問題がありますか?別のメッセージをPostサービスに送り返し、次の手順を続けますか?

  • Videoサービスからどうすればいいですか? Userサービスで別の機能を作成する必要がありますか?

私はますます多くのサービスを受けています。

私はこれがメッセージングアーキテクチャの仕組みではないと思いますが、メッセージなしで他のサービスと通信する方法がわかりません。

(または私はchain them together in the API Gatewayなので、メッセージングアーキテクチャは必要ありません)ユーザー、ポスト、ビデオ:

私が理解したものから

enter image description here

+0

あなたの質問を正しく理解しているかどうかわかりませんが、reply-toパターンを使用することを検討しましたか? http:// www。enterpriseintegrationpatterns.com/patterns/messaging/RequestReplyJmsExample.html –

答えて

1

、あなたは3つのサービスがあります。 ポストおよびビデオサービスでは、userIdではなく、引数としてユーザー名を持つコマンドを実装する必要があります。これらのサービスのすべてのデータがuserIdによって関連付けられているため、関連するuserIdを求めるためにまずユーザーサービスを呼び出すことを考えます。

答えは:これを必要とするすべてのサービスでusername-userIdの関連付けを保存する必要があります。

特定のケースでは、PostサービスとVideoサービスの両方が、UserサービスからNewUserRegisteredイベントを購読し、独自のusername-useridマップを維持する必要があります。これにより、他のサービスからユーザーサービスへの余分な呼び出しを避けることができます。

+0

ユーザーが1,000人の場合は、各サービス(各サービスはデータベースを所有しています)に格納する必要があります。したがって、「1,000 * 3」(User + Post + Video )、重複行がたくさんあるでしょうか? –

+1

はい、データの非正規化と複製は、分散システムでは一般的な方法です。 – IlliakaillI

+1

しかし、すべてのデータを複製するわけではなく、それぞれの特定のサービスで必要なものだけを複製します。あなたのケースでは、ユーザーテーブルのフィールドは2つだけです – IlliakaillI

関連する問題