ホームページ  >  記事  >  Java  >  SpringCloud Feign の詳細な説明

SpringCloud Feign の詳細な説明

WBOY
WBOY転載
2022-11-01 17:22:561674ブラウズ

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 までご連絡ください。