SpringCloud Feign超詳細講解

2022-11-01 18:00:31
Feign是Netflix公司開發的一個宣告式的REST呼叫使用者端; Ribbon負載均衡、 Hystrⅸ服務熔斷是我們Spring Cloud中進行微服務開發非常基礎的元件,下面一起來看一下,希望對大家有幫助。

程式設計師必備介面測試偵錯工具:

推薦學習:《》

一、什麼是Feign

Feign是宣告式Web Service使用者端,它讓微服務之間的呼叫變得更簡單,類似controller呼叫service。SpringCloud整合了Ribbon和Eureka,可以使用Feigin提供負載均衡的http使用者端。Feign是通過介面和註釋來實現負載均衡的。

二、Feign能幹什麼

(摘抄自狂神說JAVA)

Feign能幹什麼?

Feign旨在使編寫Java Http使用者端變得更容易

前面在使用Ribbon + RestTemplate時,利用RestTemplate對Http請求的封裝處理,形成了一套模板化的呼叫方法。但是在實際開發中,由於對服務依賴的呼叫可能不止一處,往往一個介面會被多處呼叫,所以通常都會針對每個微服務自行封裝一個使用者端類來包裝這些依賴服務的呼叫。所以,Feign在此基礎上做了進一步的封裝,由他來幫助我們定義和實現依賴服務介面的定義,在Feign的實現下,我們只需要建立一個介面並使用註解的方式來設定它 (類似以前Dao介面上標註Mapper註解,現在是一個微服務介面上面標註一個Feign註解),即可完成對服務提供方的介面繫結,簡化了使用Spring Cloud Ribbon 時,自動封裝服務呼叫使用者端的開發量。

Feign預設整合了Ribbon

利用Ribbon維護了MicroServiceCloud-Dept的服務列表資訊,並且通過輪詢實現了使用者端的負載均衡,而與Ribbon不同的是,通過Feign只需要定義服務繫結介面且以宣告式的方法,優雅而簡單的實現了服務呼叫。

三、Feign的使用步驟

1、新建一個module

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、設定applicatin.yaml

server:
port: 801

eureka:
client:
register-with-eureka: false #不向eureka註冊自己
service-url:
defaultZone: http://localhost:7001/eureka/
ribbon:
eureka:
enabled: 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();
    }
}
登入後複製
登入後複製

5、設定Controller類

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)引入Feign依賴

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
登入後複製

2)設定Service

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中的內容要和提供者一致,否則報錯(找了一下午)

下面是提供者的內容

四、結果

這樣即可獲取到資料,而且負載平衡的預設演演算法,仍然是輪詢!

推薦學習:《》

以上就是SpringCloud Feign超詳細講解的詳細內容,更多請關注TW511.COM其它相關文章!