Feignとは何ですか?
FeignはRestのリクエストを隠し、SpringMVCのようなコントローラーのふりをすることができます。URLとスプライシングパラメーターをスプライスする必要はありません。Feignがそれを行います。
Feignは、Netflixによって開発された宣言型のテンプレートHttpクライアントであり、Retrofit、JAXRS-2.0、およびWebSocketに触発されています。
Feignは、HttpApiをより便利かつエレガントに呼び出すのに役立ちます。
SpringCloudはFeignを拡張し、FeignがSpringMVCアノテーションをサポートするようにし、リボンとEurekaを統合して、Feignをより使いやすくしました。
Feignの最初の使用
依存関係をインポートする
<依存関係> <groupId> org.springframework.cloud </ groupId> <artifactId> spring-cloud-starter-openfeign </ artifactId> </依存関係>
Feignをオンにする
コメントを追加して、Feign機能を有効にします。
@SpringCloudApplication @EnableFeignClients // feignクライアント パブリック クラスを開くItcastServiceConsumerApplication { public static void main(String [] args){ SpringApplication.run(ItcastServiceConsumerApplication。クラス、引数)。 } }
RestTemplateの削除:Feignは、リボンロードバランシングのRestTemplateを自動的に継承しました。したがって、RestTemplateをここで登録する必要はありません。
クライアントを偽る
@FeignClient(value = "service-provider")// このクラスを偽のインターフェースとしてマークします public interface UserClient { @GetMapping( "user / {id}" ) ユーザーqueryById(@PathVariable( "id" )Long id); }
これはインターフェースであり、Feignは動的プロキシーを通じて実装クラスを生成するのに役立ちます。これはMybatisマッパーと非常によく似ています。
@FeignClientは、これが@Mapperアノテーションと同様にFeignクライアントであることを宣言します。また、value属性を使用してサービス名を指定します。
インターフェースの定義メソッドはSpringMVCアノテーションを使用します。Feignはアノテーションに基づいてURLを生成し、結果にアクセスするのに役立ちます。
@コントローラ @RequestMapping( "consumer / user" ) public class UserController { @Autowired プライベートUserClient userClient; @GetMapping @ResponseBody public User queryUserById(@RequestParam( "id" )Long id){ ユーザーuser = this .userClient.queryUserById(id); ユーザーを返す; } }
負荷分散
リボンの依存関係と自動構成は、すでにFeign自体に統合されています。
したがって、追加の依存関係を導入する必要はなく、RestTemplateオブジェクトを登録する必要もありません。
Hystrixサポート
FeignもデフォルトでHystrixを継承します。
これはデフォルトでオフになっており、以下のパラメーターでオンにする必要があります。
偽物: hystrix: enabled:true#Feignのヒューズ機能を有効にします
リクエストの圧縮
Spring Cloud Feignは、要求と応答のGZIP圧縮をサポートして、通信中のパフォーマンスの損失を減らします。
要求と応答の圧縮機能は、次のパラメーターを使用して有効にできます。
偽物: 圧縮: リクエスト: enabled:true #リクエスト圧縮を有効にします 応答: enabled:true#応答圧縮を有効にします
同時に、要求されたデータ型と圧縮をトリガーするサイズの下限を設定することもできます。
偽物: 圧縮: リクエスト: enabled:true #リクエスト圧縮を有効にします mime -types:text / html、application / xml、application / json#圧縮データタイプを設定 min -request-size:2048#トリガー圧縮のサイズの下限を設定
ログレベル
logging.level.xx = debugでログレベルを設定します。
@FeignClientアノテーションが変更されたクライアントは、プロキシされたときに新しいFeign.Loggerインスタンスを作成するため、これはFeignクライアントに影響を与えません。
このログのレベルを指定する必要があります。
ロギング:
レベル:
cn.itcast:デバッグ
@Configuration public class FeignLogConfiguration { @豆 Logger.Level feignLoggerLevel(){ Logger.Level.FULLを返します。 } }
NONE:デフォルト値であるログ情報を記録しません。
BASIC:リクエストメソッド、URL、レスポンスステータスコード、実行時間のみを記録します。
ヘッダー:BASICに基づいて、追加の要求および応答ヘッダー情報が記録されます。
FULL:ヘッダー情報、リクエストの本文、メタデータなど、すべてのリクエストとレスポンスの詳細を記録します。
FeignClientで構成クラスを指定する
@FeignClient(値= "サービスprivider"、フォールバック= UserFeignClientFallback。クラス、構成= FeignConfig。クラス) パブリック インターフェイスUserFeignClient { @GetMapping( "/ user / {id}" ) ユーザーqueryUserById(@PathVariable( "id" )Long id); }