2017-12-05 21 views
4

私はjavaを使用して2つのマイクロサービスを作成しました。サービスAからサービスBにREST API呼び出しを行う必要があります。送信されるデータはJSON形式になります。 jax-rsを使用すると、両方のサービスでエンティティクラスを作成する必要があります。2つのマイクロサービス間でRESTサービス間でエンティティを共有するにはどうすればよいですか?

両方のエンティティクラスが両方のプロジェクトで同じであるためです。 Do i

  • 共通のjarファイルを作成し、すべてのエンティティ/ドメインオブジェクトに使用しますか?これにより、私のマイクロサービスはより緊密に結合されますか?
  • 私は両方のマイクロサービスプロジェクトで同じクラスを作成していますか?これは両方のプロジェクトで作業を繰り返すことを意味しますか?

サービス間の通信方法はありますか?

+4

エンティティオブジェクトの一般的な瓶に何か問題はありません。それは外部のAPIライブラリを使用するのと同じ考えです –

+0

私はhecko84によって指摘されているような一般的な瓶の問題は本当だと思います。今、このワットは良い問題のように見える。 –

答えて

0

これは私たちが開発者として混乱する一般的な状況です。私は両方のマイクロサービス(AとB)で使用できる共通のjar(共有)を持つことを提案します。サードパーティのライブラリを使用するのは、第3のリソースを共有することだけです。 私の現在のプロジェクトでは同じ状況にあり、別々の共有ライブラリ(api-sharedという名前)を使い、さまざまなマイクロサービスでjarとして消費する最良の方法を見つけました。

2番目のアプローチでは、コードが冗長になり、保守が難しくなりました。エンティティに変更がある場合は、両方のエンティティを変更する必要があります。どちらのエンティティでも、同期するのには適していません。

私は両方のマイクロサービスに共有Jarを使用することをお勧めします。

よろしく

テクノ

2

独立したあなたの2つのマイクロのサービスを持って、私はまた、コードを複製するだろう将来的に独立したもそれらを持つという点で。私たちは以前とまったく同じ状況でした。いくつかのマイクロサービスは、別個のジャーに置くことができるいくつかの「共通の」クラスを使用しているようです。 最後に、次のような状況がありました。 - 同じJARを使用している複数の(5+)サービス - 異なるサービスでは、同じ意味を持つクラスが少し異なるようです。 - クラスは多かれ少なかれ、すべてのマイクロサービスでリリースするように強制しました(ここでは独立性がなくなりました) - 開発者はどこでも「共通」の動作を見ている傾向があります。したがって、「ヘルパー/ユーティリティ一方、OOPでコードの匂いと見なされていたクラスもあります。

ロングストーリーは短いですが、コードを複製することに切り替えました。私たちは、私たちのマイクロサービスを本当に独立して扱うことができます。 〜する必要があるサービス契約に固執する。内部的に起こることは完全にサービスにまで及ぶため、反復の最後にすべてのサービスをリリースする必要はありません。私は他のオプションが間違っていると言っているわけではありませんが、それは私たちには適していないことが判明しました。あなたが本当に2つのサービスの間の共通のクラスを見て、あなたは共通の図書館を他のひそかなものと混乱させないことを確信しているなら、あなたは保存してください。フォローアップとして

EDIT

は多分、我々はいくつかの共通のクラスで共有するテストコードを有するテスト(ユニットおよび統合)の点で同じ議論を行いました。最終的には、コードや受け入れ基準のわずかな変更によってテストの50%が失敗するため、これは地獄でした。一方、私たちの戦略は、テストレベルで何かを共有することではなく、テストの場ですべてのことをすることです。これにより、テストの削除や変更が非常に早くなります。結局のところ、私たちのための教訓は、ビジネスコードをきれいでエレガントなものにし、テストコードを最小限の頭痛の種にすることでした。

0

状況によりますが、共有パッケージを使用する場合は、2つのプロジェクト間の結合が導入されます。これは、両方のプロジェクトが同じデータクラスで構築されているため、同じdtoオブジェクトが動作する場合に意味があります。理想的には、共有アーティファクトの使用を簡素化する独自のネクサスがあります。 そうでなければ、いくつかのクラスだけが冗長であれば、私はおそらくそれを分離する各サービスで別々に実装するでしょう。

私は、あなたのプロジェクトに適した解決策がどれかを決定する必要があると思います。

関連する問題