SpringCloudのOpenFeign導入事例+関連取材質問

概要

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

スタートアップ クラスにアノテーションを追加して、@EnableOpenFeignClientsOpenFeign クライアントのリモート呼び出し機能を有効にします。

@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. 使い方は?

  1. まず、呼び出し元と呼び出されたマイクロサービスの両方をレジストリに登録する必要があります。

  2. 注釈は、Spring Boot スタートアップ APP でマークされます @EnableFeignClients

  3. リモート呼び出しインターフェースを作成し、注釈を付けます@FeignClient(呼び出されるマイクロサービスの名前を括弧内に追加します)

  4. インターフェイスのメソッドは、実際に呼び出したいサービスのメソッド シグネチャであり、@PostMapping注釈を使用して post-type HTTP リクエストにマップします。

Feign と openFeign の違いは何ですか?

ふりをする openFiegn
Feign は、SpringCloud コンポーネントの軽量な RESTful HTTP サービス クライアントです. Feign には、サービス レジストリ内のサービスを呼び出すためのクライアント ロード バランシング用のリボンが組み込まれています。Feign の使用方法は次のとおりです。Feign のアノテーションを使用してインターフェイスを定義し、このインターフェイスを呼び出してサービス登録センターのサービスを呼び出します。 OpenFeign は、SpringCloud が @RequestMapping などの Feign に基づいて SpringMVC アノテーションをサポートすることです。OpenFeign の @FeignClient は、SpringMVC の @RequestMapping アノテーションの下でインターフェースを解析し、動的プロキシを介して実装クラスを生成し、負荷分散を実装し、実装クラスで他のサービスを呼び出すことができます。

おすすめ

転載: blog.csdn.net/weixin_45934981/article/details/130133458