Feign:Feign是一種聲明式、模板化的HTTP客戶端。java
用個人理解來講,Feign的功能相似dubbo暴露服務,可是與dubbo稍有不一樣的是Feign是HTTP REST接口的形式暴露的。git
這一篇仍是要利用到上一篇中的service(8762),service(8763)兩個服務,先啓動這兩個服務。web
新建項目,service-feign(8765),pom加入feign依賴,完整pom代碼以下:spring
<?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。啓動類代碼以下:apache
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爲遠程調用失敗後回調的方法。代碼以下:springboot
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 yangyang@dalaoyang.cn
* @date 2018/4/20
*/
@FeignClient(value="service",fallback = FeignFallbackService.class)
//這裏是要遠程調用的服務的名稱,即你要調用服務的spring.application.name
//fallback是遠程調用失敗回調的方法
public interface FeignInterface {
@GetMapping("/")
String IndexInfo();
}
複製代碼
遠程調用失敗回調類FeignFallbackService,要實現對應的FeignClient實現對應的方法:bash
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 yangyang@dalaoyang.cn
* @date 2018/4/20
*/
@Service
public class FeignFallbackService implements FeignInterface {
@Override
public String IndexInfo(){
return "遠程調用失敗!";
};
}
複製代碼
最後看一下配置文件,須要注意的是feign.hystrix.enabled,若是配置遠程調用回調的話須要聲明一下Feign的 hystrix支持,否則頁面仍是會顯示錯誤。app
##端口號
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.cnmaven
能夠看到服務註冊成功,而後訪問http://localhost:8765/,能夠看到頁面和使用ribbon的時候同樣交替顯示。ide
控制檯
而後咱們關閉service(8762),service(8763)兩個服務,再次訪問,能夠看到
源碼下載 :大老楊碼雲
我的網站:dalaoyang.cn