ホームページ > Java > &#&チュートリアル > SpringCloud Feign の詳細な説明

SpringCloud Feign の詳細な説明

WBOY
リリース: 2022-11-01 17:22:56
転載
1733 人が閲覧しました

Feign は、Netflix によって開発された宣言型 REST 呼び出しクライアントです。リボン ロード バランシングと Hystrⅸ サービス サーキット ブレーカーは、Spring Cloud でのマイクロサービス開発のための非常に基本的なコンポーネントです。一緒に見てみましょう。皆さんのお役に立てれば幸いです。 . .

推奨学習: 「java ビデオ チュートリアル

1. Feign とは

Feign は宣言型 Web ですサービス クライアント。サービスを呼び出すコントローラーと同様に、マイクロサービス間の呼び出しを簡単にします。 SpringCloud は、Ribbon と Eureka を統合し、Feigin を使用して負荷分散された http クライアントを提供できます。 Feign は、インターフェイスとアノテーションを通じて負荷分散を実装します。

2. Feign にできることは何ですか?

(Crazy God Talks JAVA より抜粋)

Feign にできることは何ですか?

Feign は、Java Http クライアントの作成を容易にすることを目的としています。

リボン RestTemplate を使用する場合、RestTemplate を使用して Http リクエストをカプセル化し、テンプレート化された呼び出しメソッドのセットを形成しました。ただし、実際の開発では、サービスの依存関係が複数の場所で呼び出される可能性があり、インターフェイスも複数の場所で呼び出されることが多いため、通常、これらの依存サービスの呼び出しをパッケージ化するために、クライアント クラスがマイクロサービスごとにカプセル化されます。したがって、Feign はこれに基づいてさらにカプセル化を行い、依存するサービス インターフェイスの定義と実装を手伝ってくれます。Feign の実装では、インターフェイスを作成し、アノテーションを使用してそれを構成するだけです (以前の The Mapper アノテーションと同様) Dao インターフェイスでマークされ、マイクロサービス インターフェイスで Feign アノテーションがマークされます) により、サービス プロバイダーへのインターフェイス バインドが完了し、Spring Cloud リボンを使用するときにサービス呼び出しクライアントを自動的にカプセル化する開発作業が簡素化されます。

FeignはデフォルトでRibbonを統合します

Ribbonを使用してMicroServiceCloud-Deptのサービスリスト情報を維持し、ポーリングを通じてクライアントの負荷分散を実現します。Ribbonとは異なり、Feignのみサービスを定義する必要がありますインターフェイスをバインディングし、宣言的な方法でエレガントかつシンプルにサービス呼び出しを実装します。

3. Feign を使用する手順

1. 新しいモジュールを作成します

##2. Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-demo2</artifactId>
        <groupId>com.you</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>springcloud-eureka-7001</artifactId>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <!--Eureka Server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>
ログイン後にコピー
## を設定します#3. application.yaml

server:
port: 801


eureka:

client:

register-with-eureka: false #No eureka を設定します。自身を登録します
service-url:
defaultZone: http://localhost:7001/eureka/
ribbon:
eureka:
有効: true

4 . configBean
package com.you.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced  //ribbon
    /*配置负载均衡实现RestTemplate*/
    /*IRule*/
    /*RoundRobinRule 轮询 */
    /*RandomRule 随机*/
    /*AvailabilityFilteringRule 优先过滤掉跳闸、访问故障的服务,对剩下的进行轮询 */
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
ログイン後にコピー
ログイン後にコピー

の設定. コントローラ クラスの設定

package com.you.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced  //ribbon
    /*配置负载均衡实现RestTemplate*/
    /*IRule*/
    /*RoundRobinRule 轮询 */
    /*RandomRule 随机*/
    /*AvailabilityFilteringRule 优先过滤掉跳闸、访问故障的服务,对剩下的进行轮询 */
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
ログイン後にコピー
ログイン後にコピー

6. スタートアップ クラスの設定

package com.you;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {
        "com.you"})
public class FeignDeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(FeignDeptConsumer_80.class,args);
    }
}
ログイン後にコピー

7. API の変更

1) 偽の依存関係の導入

#
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
ログイン後にコピー

2) サービスの構成

##
package com.you.service;
import com.you.pojo.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface DeptClientService {
    @GetMapping("/dept/aDept/{id}")
    public Dept getDeptOfId(@PathVariable("id") Long id);
}
ログイン後にコピー
3) 注

#サービス名は正しく書く必要があります。GetMapper の内容はプロバイダーと一致している必要があります。そうでない場合はエラーが報告されます (午後をかけて探しました)

以下は、プロバイダ

4. 結果

##このようにして、データを取得できますが、負荷分散のデフォルトのアルゴリズムは引き続きポーリングです。

推奨学習: 「

Java ビデオ チュートリアル

以上がSpringCloud Feign の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート