一 服務降級的說明
1.1 服務降級說明
"服務器忙,請稍后在試"不讓客戶達等待,立即返回一個友好的提示。
1.2 服務降級的觸發(fā)情況
1.程序運行異常;
2.超時;
3.服務熔斷觸發(fā)服務降級;
4.線程池/信號量打滿也會導致服務降級
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 設置降級規(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("獲取服務器配置信息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,服務出錯了,進行服務降級"+id;
}
?2.1.3 開啟hystrix熔斷
添加:@EnableHystrix 注解
?2.2?服務端
2.2.1 pom文件
<!--hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.2.2?設置降級規(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("================服務9009 獲取到的參數(shù)id:"+id);
return "服務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,服務出錯了,進行服務降級"+id;
}
2.截圖
?2.2.3 開啟hystrix熔斷
??2.3?啟動服務測試
1.啟動nacos,啟動sleuth
2.啟動consumer9008? ?provider9009
?3.測試
三 案例:設置全局降級處理辦法
3.1 消費端設置
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;
@Autowired
private 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("獲取服務器配置信息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,服務出錯了,進行服務降級"+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;
@Autowired
private 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("獲取服務器配置信息serverUrl:"+serverURL);
System.out.println("9008的controller獲取id:"+id);
String str=orderConsumerService.getPaymentByIdLjf22222(id);
return "ok:"+serverURL+""+str;
}
@GetMapping(value = "/consumer/getinfo/{id}")
// @HystrixCommand
public 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,服務出錯了,進行服務降級"+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{
@Override
public String getPaymentByIdLjf22222(Long ssid) {
return "getPaymentByIdLjf22222方法出現(xiàn)問題開始降級";
}
@Override
public String postQueryParams(User user) {
return "postQueryParams方法出現(xiàn)問題開始降級";
}
}
?4.4 配置文件
?4.5 測試
1.故意只啟動 consuemr9008,不啟動provider9009 模擬宕機的情況
2.測試
文章來源:http://www.zghlxwxcb.cn/news/detail-653820.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-653820.html
到了這里,關(guān)于springcloud3 hystrix實現(xiàn)服務降級的案例配置2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!