zoukankan      html  css  js  c++  java
  • 【SpringCloud】Spring Cloud Alibaba 之 Sentinel 与OpenFeign整合(三十四)

      本章介绍Sentinel 与OpenFeign整合使用,

    项目框架

      

    项目搭建

      1、使用上一章项目,搭建参考:【SpringCloud】Spring Cloud Alibaba 之 Sentinel @SentinelResource使用(三十三)

      2、主要是修改项目:springcloud-consumer-sentinel-order7994服务(调用者),引入openfeign依赖

    1 <!-- openfeign -->
    2 <dependency>
    3     <groupId>org.springframework.cloud</groupId>
    4     <artifactId>spring-cloud-starter-openfeign</artifactId>
    5 </dependency>

        完整pom如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <parent>
     6         <artifactId>test-springcloud</artifactId>
     7         <groupId>com.test</groupId>
     8         <version>1.0-SNAPSHOT</version>
     9     </parent>
    10     <modelVersion>4.0.0</modelVersion>
    11 
    12     <artifactId>springcloud-consumer-sentinel-order7994</artifactId>
    13 
    14     <dependencies>
    15 
    16         <!-- alibaba nacos sentinel -->
    17         <dependency>
    18             <groupId>com.alibaba.cloud</groupId>
    19             <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    20             <version>2.2.1.RELEASE</version>
    21             <exclusions>
    22                 <exclusion>
    23                     <groupId>com.fasterxml.jackson.dataformat</groupId>
    24                     <artifactId>jackson-dataformat-xml</artifactId>
    25                 </exclusion>
    26             </exclusions>
    27         </dependency>
    28 
    29         <!-- alibaba nacos -->
    30         <dependency>
    31             <groupId>com.alibaba.cloud</groupId>
    32             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    33         </dependency>
    34 
    35         <!-- openfeign -->
    36         <dependency>
    37             <groupId>org.springframework.cloud</groupId>
    38             <artifactId>spring-cloud-starter-openfeign</artifactId>
    39         </dependency>
    40 
    41         <!-- spring boot -->
    42         <dependency>
    43             <groupId>org.springframework.boot</groupId>
    44             <artifactId>spring-boot-starter-web</artifactId>
    45         </dependency>
    46         <dependency>
    47             <groupId>org.springframework.boot</groupId>
    48             <artifactId>spring-boot-starter-actuator</artifactId>
    49         </dependency>
    50         <dependency>
    51             <groupId>org.springframework.boot</groupId>
    52             <artifactId>spring-boot-devtools</artifactId>
    53             <scope>runtime</scope>
    54             <optional>true</optional>
    55         </dependency>
    56         <dependency>
    57             <groupId>org.projectlombok</groupId>
    58             <artifactId>lombok</artifactId>
    59             <optional>true</optional>
    60         </dependency>
    61         <dependency>
    62             <groupId>org.springframework.boot</groupId>
    63             <artifactId>spring-boot-starter-test</artifactId>
    64             <scope>test</scope>
    65         </dependency>
    66 
    67     </dependencies>
    68 </project>
    View Code

        

        注意版本问题,本例使用版本

    1 <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    2 <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    3 <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>

        Hoxton.SR1 中,fegin.context接口方法的定义为parseAndValidatateMetadata
        Hoxton.SR3 中,fegin.context接口方法的定义为parseAndValidateMetadata

        由于com.alibaba.cloud.sentinel.feign.SentinelContractHolder类中使用了fegin.context接口方法,导致可能出现版本冲突,可能报错:

        AbstractMethodError: com.alibaba.cloud.sentinel.feign.SentinelContractHolder.parseAndValidateMetadata

        所以在项目用需要引入2.2.1.RELEASE版的spring-cloud-starter-alibaba-sentinel,并排除com.fasterxml.jackson.dataformat依赖(避免返回xml内容)

     1 <!-- alibaba nacos sentinel -->
     2 <dependency>
     3     <groupId>com.alibaba.cloud</groupId>
     4     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
     5     <version>2.2.1.RELEASE</version>
     6     <exclusions>
     7         <exclusion>
     8             <groupId>com.fasterxml.jackson.dataformat</groupId>
     9             <artifactId>jackson-dataformat-xml</artifactId>
    10         </exclusion>
    11     </exclusions>
    12 </dependency>

      3、application.yml文件如下,激活Sentinel对Feign的支持:

     1 # 端口
     2 server:
     3   port: 7994
     4 
     5 spring:
     6   application:
     7     name: nacos-order-consumer
     8   cloud:
     9     nacos:
    10       discovery:
    11         server-addr: localhost:8848
    12     sentinel:
    13       transport:
    14         # 配置Sentinel DashBoard地址
    15         dashboard: localhost:8080
    16         # 应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServer
    17         # 默认8719端口,假如端口被占用,依次+1,直到找到未被占用端口
    18         port: 8719
    19 
    20 
    21 # 激活Sentinel对Feign的支持
    22 feign:
    23   sentinel:
    24     enabled: true
    25 
    26 management:
    27   endpoints:
    28     web:
    29       exposure:
    30         include: '*'

      4、主启动,启用OpenFeign

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

      5、定义Feign接口,如下:

    1 @FeignClient(value = "nacos-payment-provider", fallback = PaymentFallbackService.class)
    2 public interface PaymentService {
    3 
    4     @GetMapping(value = "/paymentSQL/{id}")
    5     public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id);
    6 }

      6、定义Feign接口实现类,用于服务降级

    1 @Component
    2 public class PaymentFallbackService implements PaymentService{
    3 
    4     public CommonResult<Payment> paymentSQL(Long id) {
    5         return new CommonResult<Payment>(500, "服务降级返回,----PaymentFallbackService-paymentSQL");
    6     }
    7 }

      7、编写Controller,增加如下内容:

    1     // =======OpenFeign
    2     @Autowired
    3     private PaymentService paymentService;
    4 
    5     @GetMapping(value = "/consumer/paymentSQL/{id}")
    6     public CommonResult<Payment> paymentSQL(@PathVariable("id") Long id){
    7         return  paymentService.paymentSQL(id);
    8     }

      8、测试

        1)启动项目

        2)使用地址:http://localhost:7994/consumer/paymentSQL/3,正常获取内容

          

        3)关闭服务提供者

        4)使用地址:http://localhost:7994/consumer/paymentSQL/3,服务降级

          

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/h--d/p/12970085.html
Copyright © 2011-2022 走看看