新建 客户端 模块:cloud-consumer-feign-hystrix-order80
结构图,如下:
pom.xml
cloud201230 com.banana 1.0-SNAPSHOT 4.0.0 cloud-consumer-feign-hystrix-order80 org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-netflix-hystrix org.springframework.cloud spring-cloud-starter-netflix-eureka-client com.banana cloud-api-commons 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator
application.yml
server:
port: 80
eureka:
client:
#是否将自己注册到注册中心, 默认true
register-with-eureka: false
#是否从EurekaServer抓取已有的注册信息,单机无所谓,集群必须设置为true配合ribbon使用负载均衡
#fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka #单机版
feign:
hystrix:
enabled: true
FeignHystrixOrder80
package com.banana.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
@EnableHystrix
public class FeignHystrixOrder80 {
public static void main(String[] args) {
SpringApplication.run(FeignHystrixOrder80.class,args);
}
}
OpenFeignOrderService
package com.banana.springcloud.service;
import com.banana.springcloud.service.fallback.OpenFeignOrderFallbackService;
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;
@Component
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",fallback = OpenFeignOrderFallbackService.class)
public interface OpenFeignOrderService {
@GetMapping(value = "/payment/hystrix/success/{id}")
String feignSuccess(@PathVariable("id") Long id);
@GetMapping("/payment/hystrix/timeout/{id}")
String feignTimeout(@PathVariable("id") Long id);
}
OpenFeignOrderFallbackService
package com.banana.springcloud.service.fallback;
import com.banana.springcloud.service.OpenFeignOrderService;
import org.springframework.stereotype.Component;
@Component
public class OpenFeignOrderFallbackService implements OpenFeignOrderService {
@Override
public String feignSuccess(Long id) {
return "-------OpenFeignOrderFallbackService, feignSuccess出错啦 , o(╥﹏╥)o";
}
@Override
public String feignTimeout(Long id) {
return "-------OpenFeignOrderFallbackService, feignTimeout出错啦 , o(╥﹏╥)o";
}
}
OpenFeignOrderController
package com.banana.springcloud.controller;
import com.banana.springcloud.service.OpenFeignOrderService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/consumer/hyxtrix")
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OpenFeignOrderController {
@Resource
private OpenFeignOrderService openFeignOrderService;
@GetMapping("/success/{id}")
public String feignSuccess(@PathVariable("id") Long id){
return openFeignOrderService.feignSuccess(id);
}
@GetMapping("/timeout/{id}")
@HystrixCommand(fallbackMethod = "feignTimeoutHandler", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
public String feignTimeout(@PathVariable("id") Long id){
return openFeignOrderService.feignTimeout(id);
}
public String feignTimeoutHandler(@PathVariable("id") Long id){
return "对方支付系统繁忙,请稍后重试!";
}
@GetMapping("/global/fallback")
@HystrixCommand
public String feignGlobalFallback(){
String result = null;
return result.toString();
}
public String payment_Global_FallbackMethod() {
return "Global异常处理信息,请稍后再试,o(╥﹏╥)o";
}
}



