nacos集成Sentinel、gateway
(一)maven依赖
(1)父项目依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
(2)子项目service-privoder依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.6.0</version>
</dependency>
(3)网关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
(二)注册服务service-privoder到nacos并整合sentinel进行限流
(1)配置文件
1.bootstrap.yml配置
spring:
application:
name: privoder-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
discovery:
server-addr: 127.0.0.1:8848
sentinel:
eager: true
transport:
dashboard: localhost:8080
datasource:
ds1:
nacos:
server-addr: 127.0.0.1:8848
dataId: ${spring.application.name}-flow-rules
data-type: json
rule-type: flow
2.application.yml配置
spring:
profiles:
active: dev
server:
port: 8082
sleep: 1000
(2)添加发现微服务注解
@EnableDiscoveryClient
@SpringBootApplication
public class PrivoderApp {
public static void main(String[] args) {
SpringApplication.run(PrivoderApp.class, args);
}
}
(3)数据实体类
public class Balance {
private int id;
private int diamond;
private int ticket;
private String message;
public Balance() {
}
public int getId() {
return id;
}
public Balance(int id, int diamond, int ticket) {
this(id, diamond, ticket, "OK");
}
public Balance(int id, int diamond, int ticket, String message) {
this.id = id;
this.diamond = diamond;
this.ticket = ticket;
this.message = message;
}
public void setId(int id) {
this.id = id;
}
public int getDiamond() {
return diamond;
}
public void setDiamond(int diamond) {
this.diamond = diamond;
}
public int getTicket() {
return ticket;
}
public void setTicket(int ticket) {
this.ticket = ticket;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
(4)控制层
@RestController
@RefreshScope
public class BalanceController {
@Value("${sleep:0}")
private int sleep;
final static Map<Integer, Balance> balanceMap = new HashMap() {
{
put(1, new Balance(1, 10, 1000));
put(2, new Balance(2, 0, 10000));
put(3, new Balance(3, 100, 0));
}
};
@RequestMapping("/service")
@SentinelResource(value = "protected-resource", blockHandler = "handleBlock")
public Balance getBalance(Integer id) {
System.out.println("request: /service?id=" + id + ", sleep: " + sleep);
if (sleep > 0) {
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (id != null && balanceMap.containsKey(id)) {
return balanceMap.get(id);
}
return new Balance(0, 0, 0, "不存在");
}
public Balance handleBlock(Integer id, BlockException e) {
return new Balance(0, 0, 0, "限流");
}
}
(5)nacos添加配置文件
Data ID:privoder-service-flow-rules
格式: json
[
{
"resource": "protected-resource",
"controlBehavior": 2,
"count": 1,
"grade": 1,
"limitApp": "default",
"strategy": 0
}
]
(6)访问服务
访问localhost:8012/service?id=1
不断的刷新访问会出现限流提示
(三)网关
(1)application.yml配置
server:
port: 8010
spring:
application:
name: gateway-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
enabled: true
discovery:
locator:
lower-case-service-id: true
routes:
# Add your routes here.
- id: college_route
uri: lb://provider-service
predicates:
- Path=/provider/**
sentinel:
transport:
dashboard: localhost:8011
datasource.ds1.file:
file: "classpath: gateway.json"
ruleType: gw-flow
(2)添加发现微服务注解
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
(3)resource添加gateway.json
[
{
"resource": "college_route",
"count": 2
}
]
还没有评论,来说两句吧...