SpringCloud全家桶學習之Feign負載均衡----Feign(四)

1、Feign概述

(1)Feign是什麼?  

官網地址:https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feignhtml

  Feign是一個聲明式的WebService客戶端。使用Feign能讓編寫Web Service客戶端更加簡單,它的使用方法是定義一個接口,而後在上面添加註解,同時也支持JAX-RS標準的註解。Feign也支持可插拔式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支持了Spring MVC標準註解和HttpMessageConverters。Feign能夠與Eureka和Ribbon組合使用支持負載均衡。git

  

   看完官網介紹之後,我整我的是懵逼的,官網老是來一些不像人話的描述,個人理解,簡而言之,Feign是一個聲明式的Web服務客戶端,使用很是方便,只須要建立一個接口,而後添加註解便可完成使用,是否是很簡單?github

  爲何要使用Feign呢?個人理解:目前你們都習慣面向接口編程,好比WebService接口,dao接口,jdbc等等,已是你們的規範,在目前在項目中服務調用是經過服務名稱來調用的,這樣並無知足面向接口,因此Feign的出現就是作到面向接口,使用也很是簡單(接口+註解)。web

(2)Feign能幹什麼?

  Feign旨在使編寫Java Http客戶端變得更容易。前面練習好比:SpringCloud全家桶學習之客戶端負載均衡及自定義負載均衡算法----Ribbon(三),是經過Ribbon+RestTemplate,利用RestTemplate對http請求的封裝處理,造成了一套模板化的調用方法。可是在實際開發中,因爲對微服務的調用可能不止一處,每每一個接口會被多處調用,因此一般都會針對每一個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。因此,Feign在此基礎上作了進一步的封裝,由它來幫助咱們定義和實現服務接口的定義。在Feign的實現下,我們只需建立一個接口並使用註解的方式來配置它(之前是Dao接口上面標註Mapper註解,如今是一個微服務接口上邊標註一個Feign註解便可),便可完成對服務提供方的接口綁定,簡化了使用Spring Cloud Ribbon時,自動封裝服務調用客戶端的開發量。算法

  下面,我將我學習的小demo作筆記記錄一下。參考地址:https://github.com/OpenFeign/feignspring

  本項目地址:https://github.com/Simple-Coder/microservice-demo-study 編程

2、Feign工程搭建

(1)Maven的工程結構圖(本節操做這2個模塊)

 (2)microservice-consumer-feign添加pom依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!--Feign相關-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.microservice</groupId>
            <artifactId>microservice-inf</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>
pom

(3)microservice-inf模塊添加接口

 (3)microservice-consumer-feign啓動類添加註解(@EnableFeignClients)

 (4)測試:依次啓動3個Eureka集羣、3個provider、1個consumer-feign

(5)瀏覽器訪問:http://localhost:7001/consumer/get/1001

 

 

   說明Feign工程搭建完成!瀏覽器

3、總結

  鄙人也在摸索着學習Spring Cloud學習,在使用IDEA搭建Maven聚合工程時,走了不少大坑,好比多模塊下的SpringBoot包掃描問題,SpringBoot與Spring Cloud版本之間衝突、等等各類異常,在此模塊一個一直很讓我頭疼的異常,必需要記錄一下,異常信息以下:app

com.netflix.client.ClientException: Load balancer does not have available server for client: MICROSERVICE-PROVIDER 負載均衡

 解決方案:

  在application.yml文件中,添加以下配置便可(親測有效!) 

 

   至此,Feign工程已經搭建完成。

相關文章
相關標籤/搜索