Sentinel 服務熔斷 OpenFeign
阿新 • • 發佈:2022-03-17
Feign元件一般是消費側
1.POM中增加openfeign引入
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-nacos</artifactId> <groupId>com.ckfuture.springcloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-consumer-nacos-order84</artifactId> <dependencies> <!--SpringCloud alibaba nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--SpringCloud alibaba sentinel--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--SpringCloud openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--web+actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> </project>
2.YML中啟用Sentinel對Feign的支援
server: port: 84 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 sentinel: transport: #配置Sentinel dashboard地址 dashboard: localhost:8080 port: 8719 #消費者將要去訪問的微服務名稱(註冊成功進nacos的微服務提供者) service-url: nacos-user-service: http://nacos-payment-provider #啟用Sentinel 對Feign的支援 feign: sentinel: enabled: true
3.主啟動類啟用@EnableFeignClients
package com.ckfuture.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class OrderNacosMain84 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain84.class,args); } }
4.新建帶@FeignClient註解的業務介面
Feign就是介面+註解
介面中方法呼叫地址要和生產者中的呼叫地址一樣。參考Feign呼叫方式
package com.ckfuture.springcloud.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /** * @author ckfuture */ @FeignClient(value = "nacos-payment-provider") public interface PaymentService { @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id); }
5.建立Feign兜底類
建立名為“PaymentFallbackService”的類,實現PaymentService介面方法
package com.ckfuture.springcloud.service; import org.springframework.stereotype.Component; /** * Feign * 兜底類 */ @Component public class PaymentFallbackService implements PaymentService{ @Override public String getPayment(Integer id) { return "服務降級返回,---PaymentFallbackService"; } }
6.介面中新增fallback(兜底)方法
package com.ckfuture.springcloud.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /** * @author ckfuture */ @FeignClient(value = "nacos-payment-provider",fallback = PaymentFallbackService.class) public interface PaymentService { @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id); }
7.新增controller方法
//=============OpenFeign============ @Resource private PaymentService paymentService; @GetMapping(value = "/consumer/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id){ return paymentService.getPayment(id); }
8.測試
啟動9001生產者微服務,在Nacos中檢視。
啟動84埠的消費者,在Nacos中檢視
此時故意關閉9001埠微服務,再次請求檢視效果。