在springboot的基礎上,引入元件的啟動器
SpringCloud:在springboot的基礎上構建微服務框架
1、引入元件的啟動器 2、覆蓋預設配置 3、在引導類上新增相應的註解
eureka:註冊中心,服務的註冊與發現
服務端:
1、引入服務端啟動器:eureka-server
2、新增配置
spring.application.name 服務名 eureka.client.service-url.defaultZone http://localhost:10086/eureka 剔除無效連線的間隔時間 eureka.server.eviction-interval-timer-in-ms 關閉自我保護 eureka.server.enable-self-preservation
3、@EnableEurekaServer 開啟eureka服務端功能
客戶端:
1、引入啟動器:eureka-client
2、新增配置
spring.application.name eureka.client.service-url.defaultZone 心跳時間 eureka.instance.lease-renewal-interval-in-seconds 過期時間 eureka.instance.lease-expiration-duration-in-seconds 是否註冊給eureka容器 eureka.client.register-with-eureka 是否拉取服務列表 eureka.client.fetch-registry 拉取服務的間隔時間 eureka.client.registry-fetch-interval-seconds
3、啟用eureka客戶端:@EnableDiscoveryClient
Ribbon:負載均衡元件
eureka、feign以及zuul已整合。
配置負載均衡策略:
<service-provider(服務名)>.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule(負載均衡策略全路徑)
@LoadBalanced 在RestTemplate的@Bean方法上
hystrix:容斷元件
降級:
1、引入hystrix啟動器
2、新增配置,超時時間的配置:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 6000
3、啟用熔斷元件 @EnableCircuitBreaker
組合註解:@SpringCloudApplication,包含了@SpringBootApplication和@EnableDiscveryClient
區域性熔斷:返回值和引數列表和被熔斷的方法一致
在被熔斷的方法上 @HystrixCommand(fallbackMethod="熔斷方法名")
全域性熔斷:返回值和被熔斷的方法返回值一致,不能有引數列表
在類上 @DefaultProperties(defaultFallbck="全域性熔斷方法名")
在具體的被熔斷方法上 @HystrixCommand
熔斷:
1、close:關閉狀態
所有請求都正常訪問
2、open:開啟狀態
所有請求都無法訪問
觸發:連續失敗的比例大於50%或者失敗次數不少於20
維持5s的休眠時間
3、half open:半開狀態
釋放部分請求通過,如果正常就進入close狀態,如果不正常就進入open狀態
觸發:休眠時間之後
feign:遠端呼叫元件,整合ribbon和hystrix
1、引入feign的啟動器
2、開啟熔斷:feign.hystrix.enable=true
3、開啟feign的功能:@EnableFeignClients
4、實現:定義一個介面,使用註解@FeignClient(value="服務名", fallback=實現類.class),方法上的註解使用的都是springMVC的註解
zuul:閘道器元件,有路由和過濾器功能
1、引入啟動器
2、配置
路由字首:zuul.prefix
四種路由配置方式
1、
zuul.routes.<路由名>.path=/service-provider/**
zuul.routes.<路由名>.url=http://localhost:8081
2、
zuul.routes.<路由名>.path=/service-provider/**
zuul.routes.<路由名>.serviceId=service-provider
3、
zuul.routes.<路由名:服務名>=/service-provider/**
4、
預設服務的入口就是以服務名為字首(不配置)
3、開啟zuul閘道器元件 @EnableZuulProxy
4、自定義過濾器
介面:IZuulFilter,預設的抽象實現類:ZuulFilter
filterType:pre、post、route、error
filterOrder:執行順序,返回值越小優先順序越高
shouldFilter:是否執行run方法,true為執行
run:過濾器的具體邏輯
四種執行順序:
正常情況下:
pre-->route-->post
異常:
pre或者route出現異常,直接執行error-->post
post出現異常,error-->響應
error出現異常,error-->post