• springcloud_2021.0.3学习笔记:使用sentinel实现远程服务调用、服务熔断与服务降级


            本文主要介绍如何在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博客

    一节中已经介绍过了,需要的可以参考一下。

    1、创建消费端项目 

            打开idea新建项目,选择maven,创建springboot项目sentinel-consumer-9101。

    2、pom文件配置 

            在项目pom中引入如下依赖:

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.projectlombok</groupId>
    8. <artifactId>lombok</artifactId>
    9. </dependency>
    10. <dependency>
    11. <groupId>com.alibaba.cloud</groupId>
    12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    13. </dependency>
    14. <dependency>
    15. <groupId>com.alibaba.cloud</groupId>
    16. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    17. </dependency>
    18. <dependency>
    19. <groupId>org.springframework.cloud</groupId>
    20. <artifactId>spring-cloud-starter-openfeign</artifactId>
    21. </dependency>
    22. <dependency>
    23. <groupId>org.springframework.cloud</groupId>
    24. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    25. </dependency>
    26. </dependencies>

    3、application.yml文件配置

            在项目resources文件夹下创建application.yml文件,并按如下内容进行配置:

    1. server:
    2. port: 9101
    3. spring:
    4. application:
    5. name: sentinel-consumer-order
    6. cloud:
    7. nacos:
    8. discovery:
    9. server-addr: 127.0.0.1:8848
    10. sentinel:
    11. transport:
    12. port: 8719
    13. dashboard: localhost:8080
    14. feign:
    15. sentinel:
    16. enabled: true

    4、主应用类配置

             在项目src/main/java下创建主应用类 SentinelConsumerApplication.java,添加注解@EnableDiscoveryClient、@SpringBootApplication、@EnableFeignClients。

    1. @SpringBootApplication
    2. @EnableDiscoveryClient
    3. @EnableFeignClients
    4. public class SentinelConsumerApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(SentinelConsumerApplication.class, args);
    7. }
    8. }

    5、远程微服务接口声明

            在项目src/main/java/service下创建远程微服务接口类PaymentClientService,其中PAYMENT-SERVER为支付服务的服务名称。同时配置服务降级时的回调类PaymentClientFallback。

    1. @FeignClient(name = "nacos-payment", fallback = PaymentClientFallback.class)
    2. public interface PaymentClientService {
    3. @GetMapping("/nacos/payment/get")
    4. String get();
    5. }
    1. @Component
    2. public class PaymentClientFallback implements PaymentClientService {
    3. public String get() {
    4. return "服务调用失败,请稍后重试";
    5. }
    6. }

    6、controller层调用

            在controller层可以通过PaymentClientService进行远程微服务接口调用,使用方法如下:

    1. @RestController
    2. @RequestMapping("/order")
    3. public class OrderController {
    4. @Resource
    5. private PaymentClientService paymentClientService;
    6. @GetMapping("/get")
    7. String get() {
    8. return paymentClientService.get();
    9. }
    10. }

    本示例中用到的源码,可以通过访问GitHub - sgknight2020/springcloud2021.0.3获取。

    7、测试验证

            同时启动并运行项目nacos-payment-9001、nacos-payment-9002和sentinel-consumer-9101,同时确保已启动nacos和sentinel服务。然后在浏览器中访问http://127.0.0.1:9101/order/get进行测试。

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


     新时代农民工

  • 相关阅读:
    vue 插槽-默认插槽
    【Mysql高级特性】 InnoDB 的关键特性
    团建游戏------风中劲草
    js 强制结束循环
    Hadoop HA集群全是standBy解决办法
    Java SE 10 Application Class-Data Sharing 示例
    Floyd算法基础
    win10下yolov7 tensorrt模型部署
    Tricentis NeoLoad:自动化的企业性能测试平台
    Python实现IP代理批量采集, 并检测代理是否可用 保存一下<嫖一波免费代理>
  • 原文地址:https://blog.csdn.net/sg_knight/article/details/126718203