SpringCloud H系列 alibaba 2.1.1 (一) sentinel 限流熔斷(基於dubbo)

1.nacos安裝

請參考 : docker 安裝 nacos 1.X

2.項目父工程

請參考 : SpringCloud H系列 alibaba 2.1.1 (一) nacos1.X 註冊中心 服務端

3.項目結構 

4.創建Dubbo api 子工程(存放公共類)

pom.xml 

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-sentinel-dubbo-api</artifactId>
    <packaging>jar</packaging>

TestService.java  創建測試接口

/**
 * @author Lion Li
 */
public interface TestService {
	String test(String name);
}

 5.創建Dubbo 服務提供者

首先在nacos創建配置文件 application-sentinel-dubbo-server.yml

 application-sentinel-dubbo-server.yml

dubbo:
  protocol:
    # 使用dubbo協議通信
    name: dubbo
    # dubbo 協議端口(-1表示自增端口,從20880開始)
    port: -1
  # 掛載到 Spring Cloud 註冊中心
  registry:
    address: spring-cloud://localhost
  scan:
    # 指定 Dubbo 服務實現類的掃描基準包
    base-packages: com.alibaba.sentinel.dubbo.server.service
server:
  port: 8000

創建服務提供者子工程

pom.xml 

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-sentinel-dubbo-server</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <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-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>alibaba-sentinel-dubbo-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <!-- sentinel 依賴 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- sentinel dubbo 適配器 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo-adapter</artifactId>
        </dependency>
    </dependencies>

 SentinelDubboServerApplication.java 啓動類

/**
 * @author Lion Li
 */
@EnableDiscoveryClient // 開啓註冊中心客戶端
@SpringBootApplication
public class SentinelDubboServerApplication {
	public static void main(String[] args) {
		SpringApplication.run(SentinelDubboServerApplication.class, args);
	}
}

TestServiceImpl.java api實現類 

/**
 * @author Lion Li
 */
@Service // 這裏使用的是dubbo的 @Service 註解 將註冊到註冊中心
@RefreshScope // nacos 配置自動刷新
public class TestServiceImpl implements TestService {

	@Value("${server.port:}")
	private String port;

	@Override
	public String test(String name) {
		return "服務器::端口:"+port+"::返回值 => " + name;
	}

}

 bootstrap.yml 配置文件

spring:
  application:
    name: alibaba-sentinel-dubbo-server
  cloud:
    # Nacos 服務發現與註冊配置
    nacos:
      discovery:
        server-addr: 192.168.101.11:8848
      config:
        # 配置中心地址
        server-addr: 192.168.101.11:8848
        # 文件後綴
        file-extension: yml
        # 文件前綴
        prefix: application-sentinel-dubbo-server
        # 命名空間ID
        namespace: f799e2c7-3ab0-4e95-a7db-2150a91ec744

 啓動服務 查看nacos

啓動成功

6.創建Dubbo 服務消費者

首先在nacos創建配置文件 application-sentinel-dubbo-client.yml

dubbo:
  cloud:
    # 訂閱服務名
    subscribed-services: alibaba-sentinel-dubbo-server
  protocol:
    # 使用dubbo協議通信
    name: dubbo
    # dubbo 協議端口(-1表示自增端口,從20880開始)
    port: -1
  # 掛載到 Spring Cloud 註冊中心
  registry:
    address: spring-cloud://localhost
server:
  port: 8002

pom.xml

    <parent>
        <groupId>com.alibaba</groupId>
        <artifactId>spring-cloud-hoxton</artifactId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-sentinel-dubbo-client</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <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-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>alibaba-sentinel-dubbo-api</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- sentinel 依賴 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- sentinel dubbo 適配器 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo-adapter</artifactId>
        </dependency>
    </dependencies>

 SentinelDubboClientApplication.java 啓動類

/**
 * @author Lion Li
 */
@EnableDiscoveryClient  // 開啓註冊中心客戶端
@SpringBootApplication
public class SentinelDubboClientApplication {
	public static void main(String[] args) {
		SpringApplication.run(SentinelDubboClientApplication.class, args);
	}
}

TestController.java  消費接口 

/**
 * @author Lion Li
 */
@RestController
public class TestController {

	@Reference // dubbo注入接口 從nacos註冊中心獲取服務器地址
	private TestService testService;

	@RequestMapping("/test")
	public String test(String name) {
		return testService.test(name);
	}
}

FlowRuleConfig.java  代碼配置限流規則  將接口使用QPS規則限流爲1(QPS代表查詢量)  查詢數量大於1則限流 

/**
 * @author Lion Li
 */
@Configuration
public class FlowRuleConfig {

    public FlowRuleConfig(){
        // 代碼配置限流
        FlowRule flowRule = new FlowRule();
        // 限流資源接口
        flowRule.setResource("com.alibaba.sentinel.dubbo.api.TestService:test(java.lang.String)");
        // 限流數峯值
        flowRule.setCount(1);
        // QPS限流
        flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        flowRule.setLimitApp("default");
        FlowRuleManager.loadRules(Collections.singletonList(flowRule));
    }

}

bootstrap.yml 配置文件 

spring:
  application:
    name: alibaba-sentinel-dubbo-client
  cloud:
    # Nacos 服務發現與註冊配置
    nacos:
      discovery:
        server-addr: 192.168.101.11:8848
      config:
        # 配置中心地址
        server-addr: 192.168.101.11:8848
        # 文件後綴
        file-extension: yml
        # 文件前綴
        prefix: application-sentinel-dubbo-client
        # 命名空間ID
        namespace: f799e2c7-3ab0-4e95-a7db-2150a91ec744

啓動消費端服務 並查看nacos

啓動成功

7.測試 功能 

請求消費端接口  localhost:8002/test?name=Lion Li

服務響應正常

8.測試 限流 

連續兩次快速請求消費端接口  localhost:8002/test?name=Lion Li

第一次返回結果

第二次返回結果

限流成功 

 

項目已上傳到gitee

地址: spring-cloud-alibaba-H-demo

如果幫到您了,請幫忙點個star

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章