2017-01-23 4 views
0

マイクロサービスアーキテクチャを構築したいと思います。私は、Spring、HibernateなどのJavaテクノロジを使用しています。このシナリオでは、Javaクラスとしてエンティティを持っています。例えば、マイクロサービスにはAエンティティ、BマイクロサービスにはBエンティティなどがあります。したがって、AとBの間に1対多の関係がある場合は、クラスの1つを別のクラスにインポートして宣言する必要があります。マイクロサービスデザインのORMエンティティのパッケージ化

// in A microservice 
// need to import class of B like "import com.project.B", but can't 
// because, it is different project. 
@Entity 
class A{ 
    @OneToMany 
    B b; 
} 

//in B microservice 
@Entity 
class B{ 

} 

しかし、マイクロサービス設計のため、それらはすべて異なるパッケージまたはサービスにあります。その中にあるすべてのエンティティを含む共有ライブラリとして別のプロジェクトを作成し、それからすべてのマイクロサービスに組み込む必要がありますか?別の解決策がありますか、それとも解決策ですか?

答えて

1

私は長い研究の後で解決策を見つけました。これらのリンクを共有して、後にこの質問を見ている人たちを助けます。

基本的に、外部キー用の列を追加する必要があります。問題の私の例では、Bオブジェクトの代わりにb_idを追加する必要があります。次に、Bのidを設定します。 Bが必要なときは、そのIDを使ってBを取り出します。

https://www.quora.com/How-do-I-handle-Foreign-Keys-with-a-Microservices-architecture

http://microservices.io/patterns/data/database-per-service.html

+0

私はここで同じ懸念に直面していますので、どのように一貫性を制御しておくのですか?モデルに外部キーIDのフィールドがあると思われません。 –

+0

私はそれについて同じ感情を持っています。しかし、それは適切な解決策に見えます。一貫性を保つために、メッセージブローカー(RabbitMQなど)を使用することは良い解決策かもしれません。 この[リンク](https://programmaticponderings.com/2017/05/15/eventual-consistency-decoupling-microservices-with-spring-amqp-and-rabbitmq/)を見ることができます。 –

+0

興味深い読み込みではなく、 "外部キー属性"をb_idにする代わりに、クラスAとの関係を持っていて(完全には実装されていないかもしれない)、publish-suscribeイベントキューとの一貫性が保証されていなければなりません.. thanks @Ugurcan! –

関連する問題