09.Openfeign整合Sentinel
一、项目结构
1.父pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.luoruiyuan</groupId>
    <artifactId>Spring-Cloud-Lry</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Spring-Cloud-Lry</name>
    <description>Spring-Cloud-Lry</description>
    <packaging>pom</packaging>
    <modules>
        <module>stock</module>
        <module>order</module>
        <module>nacos-config</module>
        <module>sentinel-java</module>
        <module>order-sentinel</module>
        <module>order-oepnfeign-sentinel</module>
        <module>stock-oepnfeign-sentinel</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>2.3.12.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.8.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <!-- 版本管理(子工程引入了才会导jar包) -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <!--Spring Boot 版本管理-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--Spring Cloud 版本管理-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--Spring Cloud Alibaba 版本管理-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 直接导入jar包 -->
    <dependencies>
        <!--  Spring Boot启动器  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--  测试  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--  WEB场景  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--  开发工具 (feign.sentinel.enabled=true 时不要导入此依赖,不然项目报错)
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        -->
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>2.stock-oepnfeign-sentinel项目

pom.xml
<?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>Spring-Cloud-Lry</artifactId>
        <groupId>cn.luoruiyuan</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>stock-oepnfeign-sentinel</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--  alibaba nacos注册中心  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
</project>application.yaml
server:
  port: 8991
spring:
  #开发工具
  devtools:
    restart:
      #启动热部署
      enabled: true
  application:
    #应用名称,也是nacos服务名称
    name: stock-openfeign-sentinel-service
  cloud:
    nacos:
      #登录用户名
      username: nacos
      #登录密码
      password: nacos
      #命名空间,根据环境进行设定(dev,uat,pro)
      namespace: public
      #服务器地址
      server-addr: 127.0.0.1:8848StockController
package cn.luoruiyuan.stock.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author LRY
 * @date 2022/7/2
 */
@RestController
@RequestMapping("/stock")
public class StockController {
    @GetMapping("/addStock")
    public String addStock(){
        double err=1/0;
        return "===减库存===";
    }
}
3.order-oepnfeign-sentinel

pom.xml
<?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>Spring-Cloud-Lry</artifactId>
        <groupId>cn.luoruiyuan</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>order-openfeign-sentinel</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--  alibaba nacos注册中心  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- Sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>
</project>application.yaml
server:
  port: 8990
spring:
  application:
    #应用名称,也是nacos服务名称
    name: order-openfeign-sentinel-service
  cloud:
    nacos:
      #登录用户名,服务端用户名
      username: nacos
      #登录密码,服务端密码
      password: nacos
      #服务器地址
      server-addr: 127.0.0.1:8848
    #sentinel
    sentinel:
      transport:
        #sentinel地址
        dashboard: 127.0.0.1:9908
#openfeign启动sentinel
feign:
  sentinel:
    enabled: trueStockService
package luoruiyuan.openfeign.stock;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "stock-openfeign-sentinel-service",path="/stock",fallback = StockServiceFallback.class)
public interface StockService {
    @GetMapping("/addStock")
    public String addStock();
}
StockServiceFallback
package luoruiyuan.openfeign.stock;
import org.springframework.stereotype.Component;
/**
 * @author LRY
 * @date 2022/8/6
 */
@Component
public class StockServiceFallback implements StockService{
    @Override
    public String addStock() {
        return "降级";
    }
}
OrderController
package luoruiyuan.order.controller;
import lombok.RequiredArgsConstructor;
import luoruiyuan.openfeign.stock.StockService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author LRY
 * @date 2022/7/2
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/order")
public class OrderController {
    private final StockService stockService;
    @GetMapping("/add")
    public String addOrder() {
        return "==下单成功--" + stockService.addStock();
    }
}
OrderOpenfeignSentinelApplication
package luoruiyuan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
/**
 * @author LRY
 * @date 2022/7/2
 */
@SpringBootApplication
@EnableFeignClients
public class OrderOpenfeignSentinelApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(OrderOpenfeignSentinelApplication.class, args);
    }
}
4.访问资源

赞(1)
赏