概要
OpenFeign は、
声明式
WEB サービス クライアントをより使いやすくする WEB サービス クライアントです。アノテーションのサポートにより可插拔
、Spring Cloud は SpringMVC アノテーションのサポートを追加しました。SpringCloud は、Feign を使用するときに負荷分散された HTTP クライアントを提供するために、SpringCloud LoadBalance と同様に、Ribbon と Eureka を統合します. Feign は、远程调用
Ribbon を統合するコンポーネントです. デフォルトの負荷分散戦略は轮询
OpenFeign の使用例
① 設計図を呼び出す:
②オーダーサービス
server: port: 8080 spring: application: name: order-service eureka: client: service-url: defaultZone: http://localhost:8761/eureka instance: lease-renewal-interval-in-seconds: 5
APIを提供する
@RestController public class OrderController { @GetMapping("doOrder") public String doOrder(){ return "鱼香肉丝"; } }
③ユーザーサービス
コンシューマーがリモート呼び出しを行う必要があるため、OpenFeign 依存関係を追加します
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
構成ファイル
server: port: 8081 spring: application: name: user-service eureka: client: service-url: defaultZone: http://localhost:8761/eureka instance: lease-renewal-interval-in-seconds: 5
スタートアップ クラスにアノテーションを追加して、
@EnableOpenFeignClients
OpenFeign クライアントのリモート呼び出し機能を有効にします。@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }
インターフェイスを定義し、
@FeignClient
注釈を追加して、プロバイダーのサービス名を指定しますインターフェイスのメソッドは、プロバイダーの API 署名の一部です。
/** * @FeignClient:value=提供者的服务名 */ @FeignClient("order-service") public interface UserOrderFeign { /** * 提供者的方法签名 * 除方法体之外的全部属性 */ @GetMapping("doOrder") String doOrder(); }
このインターフェイスを挿入するコントローラーを作成し、ブラウザーが要求する API を提供します。
@RestController public class UserController { @Autowired private UserOrderFeign userOrderFeign; @GetMapping("userDoOder") public String userDoOder(){ return userOrderFeign.doOrder(); } }
④タイムアウト設定
デフォルトのタイムアウトは 1 秒です。リボンの構成を変更し、DefaultClientConfigImplを照会します。
ribbon: ReadTimeout: 3000 #调用超时时间 3s ConnectTimeout: 3000 #连接超时时间 3s
根底にあるコア原則
最下層は
JDK动态代理
インターフェイスでサービス情報を取得し、リボンを使用してRestTemplate
通話を管理します@SpringBootTest class ApplicationTests { @Autowired private RestTemplate restTemplate; @Test void contextLoads() { UserOrderFeign o = (UserOrderFeign) Proxy.newProxyInstance(UserOrderFeign.class.getClassLoader(), new Class[]{UserOrderFeign.class}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 获取目标方法上的注解 GetMapping MethodAnnotation = method.getAnnotation(GetMapping.class); // 获取注解上的请求路径 String path = MethodAnnotation.value()[0]; // 获取目标方法所在的类 Class<?> aClass = method.getDeclaringClass(); // 获取类上面的注解 FeignClient classAnnotation = aClass.getAnnotation(FeignClient.class); // 获取注解上的value值(服务名) String applicationName = classAnnotation.value(); // 拼接URL String url = "http://"+applicationName+"/"+path; // 使用Ribbon托管后的RestTemplate进行调用 return restTemplate.getForObject(url, String.class); } }); String s = o.doOrder(); System.out.println(s); } }
ログ
レベル
NONE: デフォルト、ログなし
BASE: リクエストメソッド、URL、レスポンスステータスコード、実行時間を記録
HEADERS: BASE にリクエストとレスポンスのヘッダーを追加
FULL: リクエストとレスポンスの本文を追加、HEADERS にデータなし
構成クラスを作成する
@Configuration public class OpenFeignLevelConfig { @Bean public Logger.Level level(){ return Logger.Level.FULL; } }
構成ファイルを変更する
logging: level: com.jiuxiao.controller.feign.UserOrderFeign: debug
要約する
1. openFeign は、 springmvc アノテーションを統合するHTTP クライアントであり、REST スタイルのマッピングを使用して転送を要求できます。
2. OpenFegin は、コントローラー層またはサービス層として理解できます。springmvc コントロール レイヤーをリクエスト マッピングとして、またはサービス レイヤー処理ロジックとして置き換えることができますが、ここでは、openFeign はリクエスト転送の論理操作にすぎません。
3. openFeign はヒューズ処理のために hystrix を統合し、同時に、リボン クライアント負荷分散および Eureka 登録センターと組み合わせて使用して、負荷分散クライアントを実現できます。
4. openFeign には非常に重要な機能があります。フォールバック、実際には hystrix の機能です。
インタビュー関連
1. 使い方は?
まず、呼び出し元と呼び出されたマイクロサービスの両方をレジストリに登録する必要があります。
注釈は、Spring Boot スタートアップ APP でマークされます
@EnableFeignClients
。リモート呼び出しインターフェースを作成し、注釈を付けます
@FeignClient
。(呼び出されるマイクロサービスの名前を括弧内に追加します)インターフェイスのメソッドは、実際に呼び出したいサービスのメソッド シグネチャであり、
@PostMapping
注釈を使用して post-type HTTP リクエストにマップします。Feign と openFeign の違いは何ですか?
ふりをする openFiegn Feign は、SpringCloud コンポーネントの軽量な RESTful HTTP サービス クライアントです. Feign には、サービス レジストリ内のサービスを呼び出すためのクライアント ロード バランシング用のリボンが組み込まれています。Feign の使用方法は次のとおりです。Feign のアノテーションを使用してインターフェイスを定義し、このインターフェイスを呼び出してサービス登録センターのサービスを呼び出します。 OpenFeign は、SpringCloud が @RequestMapping などの Feign に基づいて SpringMVC アノテーションをサポートすることです。OpenFeign の @FeignClient は、SpringMVC の @RequestMapping アノテーションの下でインターフェースを解析し、動的プロキシを介して実装クラスを生成し、負荷分散を実装し、実装クラスで他のサービスを呼び出すことができます。