全網(wǎng)搜索石家莊seo全網(wǎng)營銷
一 服務(wù)降級的說明
1.1 服務(wù)降級說明
"服務(wù)器忙,請稍后在試"不讓客戶達等待,立即返回一個友好的提示。
1.2 服務(wù)降級的觸發(fā)情況
1.程序運行異常;
2.超時;
3.服務(wù)熔斷觸發(fā)服務(wù)降級;4
.線程池/信號量打滿也會導致服務(wù)降級
1.3 通用注解
?
二 案例:對每一個方法實行降級處理
2.1 消費端
2.1.1 pom文件
<!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>
2.1.2 設(shè)置降級規(guī)則
代碼
@GetMapping(value = "/consumer/payment/nacos/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})public String paymentInfo(@PathVariable("id") Long id){System.out.println("獲取服務(wù)器配置信息serverUrl:"+serverURL);System.out.println("9008的controller獲取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")public Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);return orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消費者9008,服務(wù)出錯了,進行服務(wù)降級"+id;}
?2.1.3 開啟hystrix熔斷
添加:@EnableHystrix 注解
?2.2?服務(wù)端
2.2.1 pom文件
<!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>
2.2.2?設(shè)置降級規(guī)則
1.代碼
@GetMapping(value = "/ljf/getinfo/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")})public String getPayment(@PathVariable("id") Integer id){try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}int k=10/0;System.out.println("================服務(wù)9009 獲取到的參數(shù)id:"+id);return "服務(wù)9009 獲取到的參數(shù)id:"+id;}@PostMapping("/path")public String postQueryParams(@RequestBody User user) throws JsonProcessingException {String str= new JsonMapper().writeValueAsString(user);System.out.println("post提交....");return str;}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消費者9009,服務(wù)出錯了,進行服務(wù)降級"+id;}
2.截圖
?2.2.3 開啟hystrix熔斷
??2.3?啟動服務(wù)測試
1.啟動nacos,啟動sleuth
2.啟動consumer9008? ?provider9009
?3.測試
三 案例:設(shè)置全局降級處理辦法
3.1 消費端設(shè)置
1.代碼
package com.ljf.mscloud.controller;import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** @ClassName: OrderConsumerController* @Description: TODO* @Author: admin* @Date: 2023/08/14?18:09:14?* @Version: V1.0**/
@RestController
@Slf4j
@RefreshScope //支持Nacos的動態(tài)刷新功能。
//@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {@Value("${service-url.nacos-user-service}")private String serverURL;@Autowiredprivate OrderConsumerService orderConsumerService;@GetMapping(value = "/consumer/payment/nacos/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})public String paymentInfo(@PathVariable("id") Long id){System.out.println("獲取服務(wù)器配置信息serverUrl:"+serverURL);System.out.println("9008的controller獲取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")public Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);return orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消費者9008,服務(wù)出錯了,進行服務(wù)降級"+id;}public String globalFallBackInfo(){return "Global異常處理信息,請稍后再試,客戶端9008";}
}
2.截圖
?原因在沒有在制定方法加:@HystrixCommand? 那么加上此注解后:
?再次訪問:http://localhost:9008/consumer/getinfo/666
?
四 案例:給Feginclient注解的接口上添加降級規(guī)則
4.1 controller
package com.ljf.mscloud.controller;import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** @ClassName: OrderConsumerController* @Description: TODO* @Author: admin* @Date: 2023/08/14?18:09:14?* @Version: V1.0**/
@RestController
@Slf4j
@RefreshScope //支持Nacos的動態(tài)刷新功能。
//
//@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {@Value("${service-url.nacos-user-service}")private String serverURL;@Autowiredprivate OrderConsumerService orderConsumerService;@GetMapping(value = "/consumer/payment/nacos/{id}")// @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {// @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")// })public String paymentInfo(@PathVariable("id") Long id){System.out.println("獲取服務(wù)器配置信息serverUrl:"+serverURL);System.out.println("9008的controller獲取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")// @HystrixCommandpublic Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);// int age = 10/0;return orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消費者9008,服務(wù)出錯了,進行服務(wù)降級"+id;}public String globalFallBackInfo(){return "Global異常處理信息,請稍后再試,客戶端9008";}
}
4.2 service
package com.ljf.mscloud.service;import com.ljf.mscloud.model.User;
import feign.Headers;
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;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;@Component
@FeignClient(value = "mscloud-fegin-nacos-hystrix-provider9009",fallback = PaymentFallbackService.class)
public interface OrderConsumerService {@GetMapping(value = "/ljf/getinfo/{yyid}") //相當于:public String getPaymentByIdLjf22222(@PathVariable("yyid") Long ssid);// @Headers({"Content-Type: application/json"})// @PostMapping("/path")@PostMapping(value = "/path",consumes ="application/json")String postQueryParams(@RequestBody User user);
}
4.3 fallback實現(xiàn)類
@Component
public class PaymentFallbackService implements OrderConsumerService{@Overridepublic String getPaymentByIdLjf22222(Long ssid) {return "getPaymentByIdLjf22222方法出現(xiàn)問題開始降級";}@Overridepublic String postQueryParams(User user) {return "postQueryParams方法出現(xiàn)問題開始降級";}
}
?4.4 配置文件
?4.5 測試
1.故意只啟動 consuemr9008,不啟動provider9009 模擬宕機的情況
2.測試
?
?