Feign は、Netflix によって開発された宣言型 REST 呼び出しクライアントです。リボン ロード バランシングと Hystrⅸ サービス サーキット ブレーカーは、Spring Cloud でのマイクロサービス開発のための非常に基本的なコンポーネントです。一緒に見てみましょう。皆さんのお役に立てれば幸いです。 . .
推奨学習: 「java ビデオ チュートリアル 」
Feign は宣言型 Web ですサービス クライアント。サービスを呼び出すコントローラーと同様に、マイクロサービス間の呼び出しを簡単にします。 SpringCloud は、Ribbon と Eureka を統合し、Feigin を使用して負荷分散された http クライアントを提供できます。 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のみサービスを定義する必要がありますインターフェイスをバインディングし、宣言的な方法でエレガントかつシンプルにサービス呼び出しを実装します。
<?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>
port: 801client:
eureka:register-with-eureka: false #No eureka を設定します。自身を登録します
4 . configBean
service-url:
defaultZone: http://localhost:7001/eureka/
ribbon:
eureka:
有効: true
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(); } }
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); } }
<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); }
以下は、プロバイダ
4. 結果##このようにして、データを取得できますが、負荷分散のデフォルトのアルゴリズムは引き続きポーリングです。
」
以上がSpringCloud Feign の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。