本文主要介绍如何在springcloud中通过sentinel实现服务熔断与服务降级。本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8,springcloudalibaba版本为:2021.0.1.0,nacos服务端版本为:2.1.1,sentinel版本为1.8.5。
本示例会用到一个消费端项目sentinel-consumer-9101和两个生产者项目nacos-payment-9001、nacos-payment-9002。其中生产者项目在springcloud_2021.0.3学习笔记:通过nacos客户端进行服务注册_sg_knight的博客-CSDN博客
一节中已经介绍过了,需要的可以参考一下。
打开idea新建项目,选择maven,创建springboot项目sentinel-consumer-9101。

在项目pom中引入如下依赖:
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-openfeign</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-loadbalancer</artifactId>
- </dependency>
- </dependencies>
在项目resources文件夹下创建application.yml文件,并按如下内容进行配置:
- server:
- port: 9101
-
- spring:
- application:
- name: sentinel-consumer-order
- cloud:
- nacos:
- discovery:
- server-addr: 127.0.0.1:8848
- sentinel:
- transport:
- port: 8719
- dashboard: localhost:8080
- feign:
- sentinel:
- enabled: true
在项目src/main/java下创建主应用类 SentinelConsumerApplication.java,添加注解@EnableDiscoveryClient、@SpringBootApplication、@EnableFeignClients。
- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableFeignClients
- public class SentinelConsumerApplication {
- public static void main(String[] args) {
- SpringApplication.run(SentinelConsumerApplication.class, args);
- }
- }
在项目src/main/java/service下创建远程微服务接口类PaymentClientService,其中PAYMENT-SERVER为支付服务的服务名称。同时配置服务降级时的回调类PaymentClientFallback。
- @FeignClient(name = "nacos-payment", fallback = PaymentClientFallback.class)
- public interface PaymentClientService {
- @GetMapping("/nacos/payment/get")
- String get();
- }
- @Component
- public class PaymentClientFallback implements PaymentClientService {
- public String get() {
- return "服务调用失败,请稍后重试";
- }
- }
在controller层可以通过PaymentClientService进行远程微服务接口调用,使用方法如下:
- @RestController
- @RequestMapping("/order")
- public class OrderController {
- @Resource
- private PaymentClientService paymentClientService;
-
- @GetMapping("/get")
- String get() {
- return paymentClientService.get();
- }
- }
本示例中用到的源码,可以通过访问GitHub - sgknight2020/springcloud2021.0.3获取。
同时启动并运行项目nacos-payment-9001、nacos-payment-9002和sentinel-consumer-9101,同时确保已启动nacos和sentinel服务。然后在浏览器中访问http://127.0.0.1:9101/order/get进行测试。

如果服务不可访问则自动降级。
