Feign:Feign是一種聲明式、模板化的HTTP客戶端磁滚。
用我的理解來說佛吓,F(xiàn)eign的功能類似dubbo暴露服務(wù),但是與dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的垂攘。
這一篇還是要利用到上一篇中的service(8762)维雇,service(8763)兩個服務(wù),先啟動這兩個服務(wù)晒他。
新建項目吱型,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制定掃描包得話,默認(rèn)會去找項目會掃描到的所有@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);
}
}
創(chuàng)建Feign暴露接口触徐,接口上加入@FeignClient(value="service",fallback = FeignFallbackService.class)
注解。
service為要遠(yuǎn)程調(diào)用服務(wù)的名字狐赡,即你要調(diào)用服務(wù)的spring.application.name
fallback為遠(yuǎn)程調(diào)用失敗后回調(diào)的方法撞鹉。代碼如下:
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)
//這里是要遠(yuǎn)程調(diào)用的服務(wù)的名稱,即你要調(diào)用服務(wù)的spring.application.name
//fallback是遠(yuǎn)程調(diào)用失敗回調(diào)的方法
public interface FeignInterface {
@GetMapping("/")
String IndexInfo();
}
遠(yuǎn)程調(diào)用失敗回調(diào)類FeignFallbackService颖侄,要實現(xiàn)對應(yīng)的FeignClient實現(xiàn)對應(yīng)的方法:
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 "遠(yuǎn)程調(diào)用失斈癯!";
};
}
最后看一下配置文件发皿,需要注意的是feign.hystrix.enabled崔慧,如果配置遠(yuǎn)程調(diào)用回調(diào)的話需要聲明一下Feign的 hystrix支持,不然頁面還是會顯示錯誤穴墅。
##端口號
server.port=8765
##服務(wù)名稱
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.cn
可以看到服務(wù)注冊成功,然后訪問http://localhost:8765/玄货,可以看到頁面和使用ribbon的時候一樣交替顯示皇钞。
控制臺
然后我們關(guān)閉service(8762),service(8763)兩個服務(wù)松捉,再次訪問夹界,可以看到
源碼下載 :大老楊碼云