一? 介紹說明
1.1 說明
1.1.1 消費者8081
1.1.2 openfegin接口
1.1.3 提供者9091
9091微服務滿足:
1 openfegin 配置fallback邏輯,作為統一fallback服務降級處理。
2.sentinel訪問觸發了自定義的限流配置,在注解@sentinelResource里面配置blockhandler方法。
二 實操案例
2.1 consumer案例配置
2.1.1 pom配置
<!--alibaba-sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--nacos-config--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- 引入自己定義的api通用包 --><dependency><groupId>com.jurf.ms.api</groupId><artifactId>ms-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency>
2.1.2 業務代碼
@Resourceprivate PayFeignSentinelApi payFeignSentinelApi;
// @Autowired
// private OpenFeginApi openFeingApi;@GetMapping(value = "/consumer/pay/nacos/get/{orderNo}")public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo){return payFeignSentinelApi.getPayByOrderNo(orderNo);// return openFeingApi.getPayByOrderNo(orderNo);}
2.1.3 配置文件
2.1.4?啟動配置
2.2?openfegin-api的配置
2.2.1 pom文件
<!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--alibaba-sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
2.2.2?業務代碼
1.代碼接口: 注意這里要配置成訪問服務的服務名稱,和nacos的服務名一致。
/*** @auther zzyy* @create 2024-01-05 13:05*/
@FeignClient(value = "ms-alibaba-provider9091",contextId = "ms-alibaba-provider9091-1",fallback = PayFeignSentinelApiFallBack.class)
public interface PayFeignSentinelApi
{@GetMapping(value = "/pay/nacos/get/{orderNo}")public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo);
}
2.fallback實現類
@Component
public class PayFeignSentinelApiFallBack implements PayFeignSentinelApi
{@Overridepublic ResultData getPayByOrderNo(String orderNo){return ResultData.fail(ReturnCodeEnum.RC500.getCode(),"對方服務宕機或不可用,FallBack服務降級o(╥﹏╥)o");}
}
2.3??提供配置
2.3.1 pom配置
<!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--alibaba-sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
2.3.2?業務實現
//openfeign+sentinel進行服務降級和流量監控的整合處理case@GetMapping(value = "/pay/nacos/get/{orderNo}")@SentinelResource(value = "getPayByOrderNo",blockHandler = "handlerBlockHandler")public ResultData getPayByOrderNo(@PathVariable("orderNo") String orderNo){//模擬從數據庫查詢出數據并賦值給DTOPayDTO payDTO = new PayDTO();payDTO.setId(1024);payDTO.setOrderNo(orderNo);payDTO.setAmount(BigDecimal.valueOf(9.9));payDTO.setPayNo("pay:"+ IdUtil.fastUUID());payDTO.setUserId(1);return ResultData.success("查詢返回值:"+payDTO);}public ResultData handlerBlockHandler(@PathVariable("orderNo") String orderNo, BlockException exception){return ResultData.fail(ReturnCodeEnum.RC500.getCode(),"getPayByOrderNo服務不可用," +"觸發sentinel流控配置規則"+"\t"+"o(╥﹏╥)o");}
2.3.3?配置
2.4? 服務啟動
1.nacos啟動
2.sentinel啟動
3.應用服務啟動
2.5?驗證訪問
1.消費者:?http://localhost:8081/consumer/pay/nacos/get/999
2.提供者:http://localhost:9091/pay/nacos/get/222
3.驗證blockhandler
a) sentinel配置
b)頻繁刷新訪問: 提示sentinel流控規則訪問
?4.驗證fallback
關閉9091服務提供者
再次訪問:提示fallback異常提示。