2016-11-05 4 views
0

でエンティティを使用して、私はmicroservice1は私がmicroservice2でチームエンティティを使用する必要があるチームのエンティティを持っている必要があり、私は私がしていることを行うことができますどのように、microservice2でTeamRepository.javaをインポートする必要があります意味しますジプスター?私はMicroservices間のエンティティを使用するには問題を抱えている他のjhipsterのmicroservice

答えて

1

あなたはそれを行うことはできません、あなたはそれを行うべきではありません。 JPAのEntitesとSpringのリポジトリを共有しようとしてはいけません。マイクロサービスの目的を完全に破っています。分散モノリスを構築しようとするようなものです。 microservice2は、それがmicroservice1のREST APIを介してそれを行う必要がありますmicroservice1データの一部にアクセスする必要がある場合

各microserviceは、独自のデータベースを持っています。詳細は、https://github.com/jhipster/generator-jhipster/issues/3649を参照してください。

また、このようなニーズがある場合は、サービスをリファクタリングして境界を再検討する必要があるという強い兆候かもしれません。これは、マイクロサービスアーキテクチャの最も難しい部分です。行くには、いくつかの方法があるので

1

これは、答えの広い範囲を持っている質問です。

最も簡単な方法は、REST APIを介して、あなたのチームの実体を公開し、あなたの最初のアプリのエンドポイントを、呼び出すことです。これは、直接それがHTTPを介して、1つまたは複数を取得し、あなたの第2のサービスは、チームのエンティティで何かをする必要があるすべての時間を意味します。それはあなたがリポジトリを定義する方法のように見えます

@AuthorizedFeignClient(name = "microservice1") 
public interface TeamClient { 
    @RequestMapping(value = "/api/teams/", method = RequestMethod.GET) 
    List<Team> findTeams(); 

    @RequestMapping(value = "/api/teams/{id}", method = RequestMethod.GET) 
    Team findTeam(@PathVariable("id") Long id); 
} 

:これは、現在、主にUAAで

、あなただけのJPAリポジトリに非常に類似した何かを定義することができます(認証のためJHipsterのUAAを使用して)UAA構成で覆われています。しかし、RESTとは面白く動作します。また、セキュリティの問題も処理するため、定義されたユーザーまたはサービスだけがリソースにアクセスできるようにすることができます。このソリューションの詳細here

この戦略の利点は、SpringとJHipsterのすぐに使用できる実装が簡単であることです。欠点は、デザインがそうした要求を頻繁に使用することを余儀なくされ、膨大なネットワーク負荷を招く場合、パフォーマンスがかなり低下することです。

これを解決するには、Spring Cloud Bus、Event-Sourcing、CQRSなどのイベント駆動型システムを使用する方法があります。ただし、これらのオプションはJHipsterによって直接サポートされていないため、些細なことではない。

関連する問題