Spring Cloud 綜合配置 結合feign hystrix eureka 以及yml配置
阿新 • • 發佈:2019-02-20
這個是啟動類配置
@SpringBootApplication //開啟整體應用
@EnableEurekaClient //開啟客戶端服務發現
@EnableCircuitBreaker //開啟斷路器支援
@EnableFeignClients //開啟feign支援
public class PassionApp {
@Bean //配置bean,配置在容器中 注意是配置!
@LoadBalanced //netflix提供的自動化輪詢負載均衡註解,不是ribbon,也不是feign中的
public RestTemplate getRestTemplate() {return new RestTemplate();}public static void main(String[] args) {new SpringApplicationBuilder(Passion.class).web(true).run(args);//自行百度}}//import org.springframework.cloud.client.loadbalancer.LoadBalanced;
Feign介面,包含回退方法
@FeignClient(name = "spring-member-server", fallback = HelloClientFallback.class)//第一個 指向provider的名稱,第二個 包含回退方法的類 public interface HelloClient { @GetMapping("/hello") public String hello(); @GetMapping("/toHello") public String toHello(); @GetMapping("/member/{id}") public Member getMember(@PathVariable("id") Integer id);//注意這裡面的PathVariable中的id必須填寫 }
Fallback類,自定義hystrix回退方法指定的類
@Component //注意記得把這個類扔到SpringApplicationContext中 public class HelloClientFallback implements HelloClient { public String hello() { return "fall back method the 'hello'"; } public String toHello() { return "fall back method the 'toHello'"; } public Member getMember(Integer id) { return null; } }
Controller測試類
@RestController
public class FeiController {
@Autowired //開個小灶給你們講一下,這個是通過byType規則,把helloClinet實現類,通過setter方法指定到該例項中.很多賢弟不知道這是做什麼的
private HelloClient helloClient;
@GetMapping("/hello")
public String hello() {
return helloClient.hello();
}
@GetMapping("/toHello")
public String toHello() {
String result = helloClient.toHello();//我到現在也不是很懂 commandkey與groupkey是幹什麼的,都使用的是預設的
HystrixCircuitBreaker breaker = HystrixCircuitBreaker.Factory //這裡置頂的commandKey是後面yml中配置的
.getInstance(HystrixCommandKey.Factory.asKey("HelloClient#toHello()"));
System.out.println("斷路器狀態: " + breaker.isOpen());
return result;
}
@GetMapping("/yaya")
public Member getMember() {
return helloClient.getMember(1);
}
}
Final Yml Config
server:
port: 9001
spring:
application:
name: spring-passion-server
feign:
hystrix:
enabled: true //feign開啟hystrix支援
hystrix:
command:
HelloClient#toHello()://這個不配預設是全域性
execution:
isolation:
thread:
timeoutInMilliseconds: 500 //執行緒超時,呼叫Fallback方法
circuitBreaker:
requestVolumeThreshold: 3 //10秒內出現3個以上請求(已臨近閥值),並且出錯率在50%以上,開啟斷路器.斷開服務,呼叫Fallback方法
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
BEANpublic class Member { //這裡需要講一下,務必提供一個無參構造器;務必提供方法 getter/setter方法,否則你複製不了provider傳過來的物件.
private Integer id;
private String name;
private String msg;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
以上是CONSUMER 的程式碼, PROVIDER的程式碼請自行腦補.
若有疑義,留下問題