本文主要介绍如何在springcloud中通过sentinel实现服务熔断与服务降级。本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8,springcloudalibaba版本为:2021.0.1.0,nacos服务端版本为:2.1.1,sentinel版本为1.8.5。
1、创建消费端项目
打开idea新建项目,选择maven,创建springboot项目sentinel-consumer-9101。
2、pom文件配置
在项目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>
3、application.yml文件配置
在项目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
4、主应用类配置
在项目src/main/java下创建主应用类 SentinelConsumerApplication.java,添加注解@EnableDiscoveryClient、@SpringBootApplication、@EnableFeignClients。
本文主要介绍如何在springcloud中通过sentinel实现服务熔断与服务降级。本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8,springcloudalibaba版本为:2021.0.1.0,nacos服务端版本为:2.1.1,sentinel版本为1.8.5。
1、创建消费端项目
打开idea新建项目,选择maven,创建springboot项目sentinel-consumer-9101。
2、pom文件配置
在项目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>
3、application.yml文件配置
在项目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
4、主应用类配置
在项目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);
}
}
5、远程微服务接口声明
在项目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 "服务调用失败,请稍后重试";
}
}
6、controller层调用
在controller层可以通过PaymentClientService进行远程微服务接口调用,使用方法如下:
@RestController
@RequestMapping("/order")
public class OrderController {
@Resource
private PaymentClientService paymentClientService;
@GetMapping("/get")
String get() {
return paymentClientService.get();
}
}
7、测试验证
同时启动并运行项目nacos-payment-9001、nacos-payment-9002和sentinel-consumer-9101,同时确保已启动nacos和sentinel服务。然后在浏览器中访问http://127.0.0.1:9101/order/get进行测试。
如果服务不可访问则自动降级。