web-dev-qa-db-ja.com

netflix.feignとopenfeignの違い

前書き

私は最近、非常に便利なリボンとともにnetflix feignを使用しました。

この例は次のとおりです。

@FeignClient(name = "ldap-proxy")
public interface LdapProxyClient  { 
    @RequestMapping(path = "/ldap-proxy/v1/users/{userNameOrEMail}", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET)
    LdapUser search(@PathVariable("userNameOrEMail") String userNameOrEMail);
}

しかし、ある時点で、これらのすべての定義を手動でコーディングする代わりに(既存のWebサービスの場合)、ツールが存在するかどうかを確認する必要があると考えました。

私はhttps://github.com/swagger-api/swagger-codegenに出くわし、クライアントが生成される例があることを見ました。 https://github.com/swagger-api/swagger-codegen/tree/master/samples/client/petstore/Java/feign .

しかし、インポートを詳しく見ると、次のことに気付きました。

import feign.Feign;

一方、Netflixのオープンソースソリューションのパッケージ名はorg.springframework.cloud.netflix.feignです。

さらに、利用可能な場合は両方ともリボンを使用することに気付きましたが、Netflixの表記ははるかにきれいで、バックグラウンドで多くのことが発生します。例えば。 @FeignClientアノテーションクラスjavadocの状態:

  • RESTそのインターフェイスを備えたクライアントを作成する必要があることを宣言するインターフェイスの注釈(たとえば、別のコンポーネントへの自動配線用)。リボンが利用可能な場合、バックエンド要求の負荷分散に使用されます。ロードバランサーは、偽のクライアントと同じ名前(つまり値)で@RibbonClientを使用して構成できます。

ただし、Feign.feignドキュメント( https://github.com/OpenFeign/feign )に次のように表示されます。

RibbonClientは、FeignのクライアントのURL解決をオーバーライドし、Ribbonが提供するスマートルーティングおよび復元機能を追加します。

統合では、リボンクライアント名をURLのホスト部分として渡す必要があります(例:myAppProd)。

> MyService api =
> Feign.builder().client(RibbonClient.create()).target(MyService.class,
> "https://myAppProd");

だから私の質問は:

  1. 歴史/関係と両者の違いは何ですか?
  2. それぞれの長所と短所は何ですか?

それらはまったく関係のない完全に異なるプロジェクトですか、それともnetflixはOpenFeignをフォーク/活用し、統合されたクラウドソリューション内に収まるように修正しただけですか?本質的に、Netflixは、ディスカバリー、リボン、オープンソースプロジェクトからの偽装などのさまざまなテクノロジーを取得して統合しただけですか?

9

org.springframework.cloud.netflix.feignSpring Cloud Netflix の一部であり、これは Spring Cloud の一部です。

Spring Cloudは、OpenFeignを内部で使用します。 Spring MVCアノテーションをサポートするように拡張し、自動構成によりSpring Bootアプリの統合を提供することで、Spring環境の第一級市民にしています。

ドキュメント から:

Feignは宣言型のWebサービスクライアントです。 Spring Cloudは、Spring MVCアノテーションのサポートと、Spring Webでデフォルトで使用される同じHttpMessageConvertersの使用をサポートします。 Spring CloudはリボンとEurekaを統合して、Feignの使用時に負荷分散されたhttpクライアントを提供します。

ドキュメントにはOpenFeignプロジェクトへのリンクがあることに注意してください。

したがって、Spring Bootを使用する場合は、Spring Cloud OpenFeign統合を使用する方がより簡単で簡単です。

ソースコード も参照してください。

11
Eien

「Netflix feign」は、oldプロジェクト指定です。最後のバージョン(以下の依存関係)は2016年7月の日付です。

compile group: 'com.netflix.feign', name: 'feign-core', version:'8.18.0'   // OLD

「オープンフェーン」は、newプロジェクトの指定です。同じプロジェクトですが、別のgitリポジトリに移動され、新しいグループIDを取得しました。バージョンは9.0.0から始まります。

compile group: 'io.github.openfeign', name: 'feign-core', version: '10.0.1'   // NEW

何が起こったかの簡単な履歴については、 このgithubの問題 を参照してください。最も注目すべきは、FeignがNetflixで内部的に使用されなくなったことです。 :^ o

14
Paulo Merson