spring cloudマイクロサービス分布クラウドアーキテクチャ-サービス消費者Feign

3587 ワード

一、Feign概要
Feignは、Httpクライアントを書くことがより簡単になるように、声明式の擬似Httpクライアントである。Feignを使用すると,一つのインターフェースを作成し,注釈するだけでよい。これは挿抜可能な注釈特性を持っていて、Feign注解とJAX-RS注解を使用できます。Feignは、挿抜可能なエンコーダおよびデコーダをサポートする。FeignはデフォルトではRibbonを統合し,Eurekaと結合し,デフォルトでは負荷均衡の効果を実現した。Spring Cloud大企業分布式マイクロサービスクラウドのソースコードの構造を追加してください。
簡単に言うと:
  • Feignは、インターフェースベースの注釈
  • を採用している。
  • Feignは、ribbonを統合し、負荷の均衡を持つ能力
  • を有する。
  • はHystrixを統合し、溶断能力を持つ
  • を有する。
    二、準備工作
    前回のプロジェクトを引き続き使って、eurka-serverを起動して、ポートは8761です。Service-hiを2回起動します。ポートはそれぞれ8762、8773です。
    三、feignを作成するサービス
    新しいspring-bootプロジェクトをserice-feignと名付けて、そのpomファイルにFeignの初歩依存spring-cloud-starter-feignを導入して、Eurekaの初歩依存spring-cloud-netflix-eure-client、Webの初歩依存spring-borg-starter-web、コードは以下の通りです。
    
        4.0.0
     
        com.forezp
        service-feign
        0.0.1-SNAPSHOT
        jar
     
        service-feign
        Demo project for Spring Boot
     
     
        
            com.forezp
            sc-f-chapter3
            0.0.1-SNAPSHOT
        
     
        
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.cloud
                spring-cloud-starter-openfeign
            
        
     
        
    
    プロジェクトのプロファイルapplication.ymlファイルで、指定プログラム名はservice-feignで、ポート番号は8765で、サービス登録住所はhttp:/local host:8761/eureka/となります。コードは以下の通りです。
    eureka: 
     client:    
    serviceUrl:   
       defaultZone: http://localhost:8761/eureka/server:  
    port: 8765spring:  application:  
      name: service-feign
    
    プログラムの起動クラスServiceFeignAppleicationに@EnbaleFeign Clients注釈を加えてFeignの機能を開始します。
    @SpringBootApplication
    @EnableEurekaClient
    @EnableDiscoveryClient
    @EnableFeignClients
    public class ServiceFeignApplication 
    {     public static void main(String[] args)
     {        SpringApplication.run( ServiceFeignApplication.class, args ); 
       }} 
    
    一つのfeignインターフェースを定義し、@Feign Clientを通じてどのサービスを呼び出すかを指定します。例えば、コードでservice-hiサービスの「/hi」インターフェースを呼び出します。コードは以下の通りです。
    @FeignClient(value = "service-hi")
    public interface SchedualServiceHi 
    { 
       @RequestMapping(value = "/hi",
    method = RequestMethod.GET)  
      String sayHiFromClientOne
    (@RequestParam(value = "name") 
    String name);
    }
    
    Web層のcontroller層において、外部には「hi」というAPIインターフェースが露出され、上記で定義されたFeignクライアントSchhedualServiceHiによってサービスが消費される。コードは以下の通りです
    @RestControllerpublic class HiController
     {      //     ,  。     Bean            ,       ,    。 
       @Autowired    SchedualServiceHi schedualServiceHi;
         @GetMapping(value = "/hi")   
     public String sayHi
    (
    @RequestParam String name)
     {    
        return schedualServiceHi.sayHiFromClientOne( name ); 
       }
    }
    
    プログラムを起動して、何度もhttp:/local host:8765/hi?name=forezpにアクセスして、ブラウザが交互に表示されます。
    hi forezp,i am from port:8762 hi forezp,
    i am from port:8763