Feign是Netflix公司開發的一個聲明式的REST調用客戶端; Ribbon負載平衡、 Hystrⅸ服務熔斷是我們Spring Cloud中進行微服務開發非常基礎的組件,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
Feign是聲明式Web Service客戶端,它讓微服務之間的呼叫變得更簡單,類似controller呼叫service。 SpringCloud整合了Ribbon和Eureka,可以使用Feigin提供負載平衡的http客戶端。 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只需要定義服務綁定介面且以宣告式的方法,優雅而簡單的實作了服務呼叫。
<?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>
H #H## 4、設定configBeanserver:
port: 801eureka:
client:
register-with-eureka: false #不向eureka註冊自己
service-url:
defaultZone: http://localhost:7001/eureka/
ribbon:
eureka:
enabled: 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(); } }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
<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中的內容要和提供者一致,否則報錯(找了一整個下午)######下面是提供者的內容########### ####四、結果######這樣即可取得到數據,而且負載平衡的預設演算法,仍然是輪詢! ###############推薦學習:《###java影片教學###》###
以上是SpringCloud Feign超詳細解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!