Feign:Feign是一種聲明式、模闆化的HTTP用戶端。
用我的了解來說,Feign的功能類似dubbo暴露服務,但是與dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的。
這一篇還是要利用到上一篇中的service(8762),service(8763)兩個服務,先啟動這兩個服務。
建立項目,service-feign(8765),pom加入feign依賴,完整pom代碼如下:
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalaoyang</groupId>
<artifactId>springcloud_feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud_feign</name>
<description>springcloud_feign</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在啟動類加入@EnableFeignClients注解,如果沒有加入basePackages制定掃描包得話,預設會去找項目會掃描到的所有@FeignClient。啟動類代碼如下:
package com.dalaoyang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
//@EnableFeignClients(basePackages = "com.dalaoyang.interfaces")
@EnableFeignClients
public class SpringcloudFeignApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudFeignApplication.class, args);
}
}
建立Feign暴露接口,接口上加入@FeignClient(value="service",fallback = FeignFallbackService.class)
注解。
service為要遠端調用服務的名字,即你要調用服務的spring.application.name
fallback為遠端調用失敗後回調的方法。代碼如下:
package com.dalaoyang.interfaces;
import com.dalaoyang.back.FeignFallbackService;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author dalaoyang
* @Description
* @project springcloud_learn
* @package com.dalaoyang.interfaces
* @email [email protected]
* @date 2018/4/20
*/
@FeignClient(value="service",fallback = FeignFallbackService.class)
//這裡是要遠端調用的服務的名稱,即你要調用服務的spring.application.name
//fallback是遠端調用失敗回調的方法
public interface FeignInterface {
@GetMapping("/")
String IndexInfo();
}
遠端調用失敗回調類FeignFallbackService,要實作對應的FeignClient實作對應的方法:
package com.dalaoyang.back;
import com.dalaoyang.interfaces.FeignInterface;
import org.springframework.stereotype.Service;
/**
* @author dalaoyang
* @Description
* @project springcloud_learn
* @package com.dalaoyang.back
* @email [email protected]
* @date 2018/4/20
*/
@Service
public class FeignFallbackService implements FeignInterface {
@Override
public String IndexInfo(){
return "遠端調用失敗!";
};
}
最後看一下配置檔案,需要注意的是feign.hystrix.enabled,如果配置遠端調用回調的話需要聲明一下Feign的 hystrix支援,不然頁面還是會顯示錯誤。
##端口号
server.port=8765
##服務名稱
spring.application.name=service_feign
##注冊中心位址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/
##聲明Feign的 hystrix支援
feign.hystrix.enabled=true
啟動service-feign(8765),先去看一眼
http://eureka.dalaoyang.cnimage
可以看到服務注冊成功,然後通路
http://localhost:8765/,可以看到頁面和使用ribbon的時候一樣交替顯示。
控制台
然後我們關閉service(8762),service(8763)兩個服務,再次通路,可以看到
源碼下載下傳 :
大老楊碼雲個人網站:
https://dalaoyang.cn