ext {
springBootVersion = '2.0.4.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = 'Finchley.SR1'
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
compile('org.springframework.cloud:spring-cloud-starter-openfeign')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
application.yml文件
server:
port: 8796
spring:
application:
name: service-feign-hystrix
eureka:
client:
service-url:
defaultZone: http://localhost:8791/eureka/
feign:
hystrix:
enabled: true #feign自帶斷路器,但需要打開
主方法:
package com.example.servicefeignhystrix;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableEurekaClient
@EnableFeignClients
@SpringBootApplication
public class ServiceFeignHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceFeignHystrixApplication.class, args);
}
}
接口SayHiService.java文件
package com.example.servicefeignhystrix;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@FeignClient(value = "eureka-client-say-hi",fallback = SayHiServiceWithHystrix.class)
public interface SayHiService {
@RequestMapping(value = "/hi", method = RequestMethod.GET)
String sayHiFromClient();
}
SayHiServiceWithHystrix.java文件
package com.example.servicefeignhystrix;
import org.springframework.stereotype.Component;
@Component
public class SayHiServiceWithHystrix implements SayHiService {
@Override
public String sayHiFromClient() {
return "sorry,I am wrong";
}
}
HelloController.java文件
package com.example.servicefeignhystrix;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
SayHiService sayHiService;
@RequestMapping("/hi")
public String sayHi(){
return sayHiService.sayHiFromClient();
}
}
此時啟動eureka-server,以及eureka-client-say-hi項目的兩個實例,以及剛才新建的項目service-feign-hystrix.
訪問http://localhost:8796/hi
出現以下兩種場景:
和
如果關掉8792端口的服務,則會返回hi,I am port 8793
如果關掉eureka-client-say-hi服務的8792和8793兩個端口實例,則會返回
此時標明,feign的斷路器已經生效了。
閱讀更多 JAVA技術開發 的文章