1. 程式人生 > >Spring Cloud 綜合配置 結合feign hystrix eureka 以及yml配置

Spring Cloud 綜合配置 結合feign hystrix eureka 以及yml配置

這個是啟動類配置
@SpringBootApplication  //開啟整體應用  
@EnableEurekaClient    //開啟客戶端服務發現
@EnableCircuitBreaker //開啟斷路器支援
@EnableFeignClients //開啟feign支援
public class PassionApp {

	@Bean //配置bean,配置在容器中 注意是配置!
	@LoadBalanced //netflix提供的自動化輪詢負載均衡註解,不是ribbon,也不是feign中的
      //import org.springframework.cloud.client.loadbalancer.LoadBalanced;
public RestTemplate getRestTemplate() {return new RestTemplate();}public static void main(String[] args) {new SpringApplicationBuilder(Passion.class).web(true).run(args);//自行百度}}

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/
BEAN
public 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的程式碼請自行腦補.

若有疑義,留下問題