SpringCloud?Feign超詳細(xì)講解
一、什么是Feign
Feign是聲明式Web Service客戶端,它讓微服務(wù)之間的調(diào)用變得更簡(jiǎn)單,類似controller調(diào)用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供負(fù)載均衡的http客戶端。Feign是通過(guò)接口和注釋來(lái)實(shí)現(xiàn)負(fù)載均衡的。
二、Feign能干什么
(摘抄自狂神說(shuō)JAVA)
Feign能干什么?
Feign旨在使編寫Java Http客戶端變得更容易
前面在使用Ribbon + RestTemplate時(shí),利用RestTemplate對(duì)Http請(qǐng)求的封裝處理,形成了一套模板化的調(diào)用方法。但是在實(shí)際開發(fā)中,由于對(duì)服務(wù)依賴的調(diào)用可能不止一處,往往一個(gè)接口會(huì)被多處調(diào)用,所以通常都會(huì)針對(duì)每個(gè)微服務(wù)自行封裝一個(gè)客戶端類來(lái)包裝這些依賴服務(wù)的調(diào)用。所以,F(xiàn)eign在此基礎(chǔ)上做了進(jìn)一步的封裝,由他來(lái)幫助我們定義和實(shí)現(xiàn)依賴服務(wù)接口的定義,在Feign的實(shí)現(xiàn)下,我們只需要?jiǎng)?chuàng)建一個(gè)接口并使用注解的方式來(lái)配置它 (類似以前Dao接口上標(biāo)注Mapper注解,現(xiàn)在是一個(gè)微服務(wù)接口上面標(biāo)注一個(gè)Feign注解),即可完成對(duì)服務(wù)提供方的接口綁定,簡(jiǎn)化了使用Spring Cloud Ribbon 時(shí),自動(dòng)封裝服務(wù)調(diào)用客戶端的開發(fā)量。
Feign默認(rèn)集成了Ribbon
利用Ribbon維護(hù)了MicroServiceCloud-Dept的服務(wù)列表信息,并且通過(guò)輪詢實(shí)現(xiàn)了客戶端的負(fù)載均衡,而與Ribbon不同的是,通過(guò)Feign只需要定義服務(wù)綁定接口且以聲明式的方法,優(yōu)雅而簡(jiǎn)單的實(shí)現(xiàn)了服務(wù)調(diào)用。
三、Feign的使用步驟
1、新建一個(gè)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: 801eureka:
client:
register-with-eureka: false #不向eureka注冊(cè)自己
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
/*配置負(fù)載均衡實(shí)現(xiàn)RestTemplate*/
/*IRule*/
/*RoundRobinRule 輪詢 */
/*RandomRule 隨機(jī)*/
/*AvailabilityFilteringRule 優(yōu)先過(guò)濾掉跳閘、訪問(wèn)故障的服務(wù),對(duì)剩下的進(jìn)行輪詢 */
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
/*配置負(fù)載均衡實(shí)現(xiàn)RestTemplate*/
/*IRule*/
/*RoundRobinRule 輪詢 */
/*RandomRule 隨機(jī)*/
/*AvailabilityFilteringRule 優(yōu)先過(guò)濾掉跳閘、訪問(wèn)故障的服務(wù),對(duì)剩下的進(jìn)行輪詢 */
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}6、配置啟動(dòng)類
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、改動(dòng)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)注意

服務(wù)名字要寫對(duì)GetMapper中的內(nèi)容要和提供者一致,否則報(bào)錯(cuò)(找了一下午)
下面是提供者的內(nèi)容

四、結(jié)果
這樣即可獲取到數(shù)據(jù),而且負(fù)載平衡的默認(rèn)算法,仍然是輪詢!

到此這篇關(guān)于SpringCloud Feign超詳細(xì)講解的文章就介紹到這了,更多相關(guān)SpringCloud Feign內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis中多對(duì)多關(guān)系的映射和查詢
本文主要介紹了MyBatis中多對(duì)多關(guān)系的映射和查詢的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法。2016-11-11
SpringDataJpa寫原生sql遇到的問(wèn)題及解決
這篇文章主要介紹了SpringDataJpa寫原生sql遇到的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
解決response.setHeader設(shè)置下載文件名無(wú)效的問(wèn)題
這篇文章主要介紹了解決response.setHeader設(shè)置下載文件名無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
springboot實(shí)現(xiàn)string轉(zhuǎn)json json里面帶數(shù)組
這篇文章主要介紹了springboot實(shí)現(xiàn)string轉(zhuǎn)json json里面帶數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
spring+srpingmvc+hibernate實(shí)現(xiàn)動(dòng)態(tài)ztree生成樹狀圖效果
這篇文章主要介紹了spring+srpingmvc+hibernate動(dòng)態(tài)ztree生成樹狀圖效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Java中excel表數(shù)據(jù)的批量導(dǎo)入方法
這篇文章主要為大家詳細(xì)介紹了Java中excel表數(shù)據(jù)的批量導(dǎo)入方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Spring Boot實(shí)現(xiàn)微信小程序登錄
這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)微信小程序登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04

