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