Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦中观雨
SpringCloud2020
提交
2e21c2e0
S
SpringCloud2020
项目概览
梦中观雨
/
SpringCloud2020
与 Fork 源项目一致
Fork自
Lcry / SpringCloud2020
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
SpringCloud2020
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2e21c2e0
编写于
3月 17, 2020
作者:
Lcry
🖥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
P111-P137:完成服务熔断和限流:Sentinel
上级
dc8bda77
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
834 addition
and
1 deletion
+834
-1
.gitignore
.gitignore
+5
-1
cloudalibaba-consumer-nacos-order84/pom.xml
cloudalibaba-consumer-nacos-order84/pom.xml
+70
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/NacosOrderMain84.java
...in/java/com/lcry/springcloudalibaba/NacosOrderMain84.java
+21
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/config/ApplicationContextConfig.java
...y/springcloudalibaba/config/ApplicationContextConfig.java
+20
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/controller/CircleBreakerController.java
...pringcloudalibaba/controller/CircleBreakerController.java
+91
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java
...ry/springcloudalibaba/myhandler/CustomerBlockHandler.java
+19
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentFallbackService.java
...ry/springcloudalibaba/service/PaymentFallbackService.java
+18
-0
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentService.java
...a/com/lcry/springcloudalibaba/service/PaymentService.java
+21
-0
cloudalibaba-consumer-nacos-order84/src/main/resources/application.yml
...consumer-nacos-order84/src/main/resources/application.yml
+46
-0
cloudalibaba-provider-nacos-payment9003/pom.xml
cloudalibaba-provider-nacos-payment9003/pom.xml
+58
-0
cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9003.java
...ava/com/lcry/springcloudalibaba/NacosPaymentMain9003.java
+20
-0
cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java
...lcry/springcloudalibaba/controller/PaymentController.java
+38
-0
cloudalibaba-provider-nacos-payment9003/src/main/resources/application.yml
...ider-nacos-payment9003/src/main/resources/application.yml
+16
-0
cloudalibaba-provider-nacos-payment9004/pom.xml
cloudalibaba-provider-nacos-payment9004/pom.xml
+56
-0
cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9004.java
...ava/com/lcry/springcloudalibaba/NacosPaymentMain9004.java
+20
-0
cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java
...lcry/springcloudalibaba/controller/PaymentController.java
+38
-0
cloudalibaba-provider-nacos-payment9004/src/main/resources/application.yml
...ider-nacos-payment9004/src/main/resources/application.yml
+16
-0
cloudalibaba-sentinel-service8401/pom.xml
cloudalibaba-sentinel-service8401/pom.xml
+76
-0
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/SentinelServiceMain8401.java
.../com/lcry/springcloudalibaba/SentinelServiceMain8401.java
+20
-0
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/FlowLimitController.java
...ry/springcloudalibaba/controller/FlowLimitController.java
+67
-0
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/RateLimitController.java
...ry/springcloudalibaba/controller/RateLimitController.java
+42
-0
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java
...ry/springcloudalibaba/myhandler/CustomerBlockHandler.java
+19
-0
cloudalibaba-sentinel-service8401/src/main/resources/application.yml
...a-sentinel-service8401/src/main/resources/application.yml
+33
-0
pom.xml
pom.xml
+4
-0
未找到文件。
.gitignore
浏览文件 @
2e21c2e0
...
...
@@ -135,4 +135,8 @@ cloud-stream-consumer-rabbitmq8802/target/
cloud-stream-consumer-rabbitmq8803/target/
cloudalibaba-config-nacos-client3377/target/
cloudalibaba-provider-nacos-payment9001/target/
cloudalibaba-provider-nacos-payment9002/target/
\ No newline at end of file
cloudalibaba-provider-nacos-payment9002/target/
cloudalibaba-provider-nacos-payment9003/target/
cloudalibaba-provider-nacos-payment9004/target/
cloudalibaba-sentinel-service8401/target/
cloudalibaba-consumer-nacos-order84/target/
\ No newline at end of file
cloudalibaba-consumer-nacos-order84/pom.xml
0 → 100644
浏览文件 @
2e21c2e0
<?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>
2020SpringCloud
</artifactId>
<groupId>
com.lcry
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<!-- 服务消费方,整合rabbin和feign,sentinel限流熔断等-->
<artifactId>
cloudalibaba-consumer-nacos-order84
</artifactId>
<dependencies>
<!--SpringCloud openfeign -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel-datasource-nacos做持久化用到-->
<dependency>
<groupId>
com.alibaba.csp
</groupId>
<artifactId>
sentinel-datasource-nacos
</artifactId>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-sentinel
</artifactId>
</dependency>
<!--引入自己定义的api调用包,可以使用Payment支付Entity-->
<dependency>
<groupId>
com.lcry
</groupId>
<artifactId>
cloud-api-commons
</artifactId>
<version>
${project.version}
</version>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/NacosOrderMain84.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
/**
* NacosOrderMain84
*
* @author lcry
* @date 2020/03/17 16:16
*/
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
//整合feign
public
class
NacosOrderMain84
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
NacosOrderMain84
.
class
,
args
);
}
}
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/config/ApplicationContextConfig.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.config
;
import
org.springframework.cloud.client.loadbalancer.LoadBalanced
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.client.RestTemplate
;
/**
* 配置RestTemplate
*/
@Configuration
public
class
ApplicationContextConfig
{
@Bean
@LoadBalanced
public
RestTemplate
getRestTemplate
()
{
return
new
RestTemplate
();
}
}
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/controller/CircleBreakerController.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.controller
;
import
com.alibaba.csp.sentinel.annotation.SentinelResource
;
import
com.alibaba.csp.sentinel.slots.block.BlockException
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
com.lcry.springcloudalibaba.myhandler.CustomerBlockHandler
;
import
com.lcry.springcloudalibaba.service.PaymentService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.Resource
;
/**
* CircleBreakerController
*
* @author lcry
* @date 2020/03/17 16:18
* 使用示例:
*/
@RestController
@Slf4j
public
class
CircleBreakerController
{
public
static
final
String
SERVICE_URL
=
"http://nacos-payment-provider"
;
// 整个rabbin - restTemplate
@Resource
private
RestTemplate
restTemplate
;
// 整合sentinel
@RequestMapping
(
"/consumer/fallback/{id}"
)
//@SentinelResource(value = "fallback") //没有配置
//@SentinelResource(value = "fallback",fallback = "handlerFallback") //fallback只负责业务异常
//@SentinelResource(value = "fallback",blockHandler = "blockHandler") //blockHandler只负责sentinel控制台配置违规
// @SentinelResource(value = "fallback",fallback = "handlerFallback",blockHandler = "blockHandler", //分开自定义
// exceptionsToIgnore = {IllegalArgumentException.class}//排除异常不限流
// )
@SentinelResource
(
value
=
"fallback"
,
//,fallback = "handlerFallback",
blockHandlerClass
=
CustomerBlockHandler
.
class
,
//异常自定义
blockHandler
=
"handlerException1"
//分开自定义
)
public
CommonResult
<
Payment
>
fallback
(
@PathVariable
Long
id
)
{
CommonResult
<
Payment
>
result
=
restTemplate
.
getForObject
(
SERVICE_URL
+
"/paymentSQL/"
+
id
,
CommonResult
.
class
,
id
);
if
(
id
==
4
)
{
throw
new
IllegalArgumentException
(
"IllegalArgumentException,非法参数异常...."
);
}
else
if
(
result
.
getData
()
==
null
)
{
throw
new
NullPointerException
(
"NullPointerException,该ID没有对应记录,空指针异常"
);
}
return
result
;
}
//本例是fallback
public
CommonResult
handlerFallback
(
@PathVariable
Long
id
,
Throwable
e
)
{
Payment
payment
=
new
Payment
(
id
,
"null"
);
return
new
CommonResult
<>(
444
,
"兜底异常handlerFallback,exception内容 "
+
e
.
getMessage
(),
payment
);
}
//本例是blockHandler
public
CommonResult
blockHandler
(
@PathVariable
Long
id
,
BlockException
blockException
)
{
Payment
payment
=
new
Payment
(
id
,
"null"
);
return
new
CommonResult
<>(
445
,
"blockHandler-sentinel限流,无此流水: blockException "
+
blockException
.
getMessage
(),
payment
);
}
//OpenFeign调用
@Resource
private
PaymentService
paymentService
;
@GetMapping
(
value
=
"/consumer/paymentSQL/{id}"
)
public
CommonResult
<
Payment
>
paymentSQL
(
@PathVariable
(
"id"
)
Long
id
)
{
return
paymentService
.
paymentSQL
(
id
);
}
/*
测试自定义限流
*/
@GetMapping
(
value
=
"/consumer/paymentSQL"
)
@SentinelResource
(
value
=
"customerBlockHandler"
,
//资源名称
blockHandlerClass
=
CustomerBlockHandler
.
class
,
//异常自定义
blockHandler
=
"handlerException1"
)
//调用自定义类某个方法
public
CommonResult
<
Payment
>
paymentSQL2
()
{
return
paymentService
.
paymentSQL
(
1L
);
}
}
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.myhandler
;
import
com.alibaba.csp.sentinel.slots.block.BlockException
;
import
com.lcry.springcloud.entities.CommonResult
;
/**
* @author lcry
* @date 2020/03/17 14:51
* 用户自定义处理异常类
*/
public
class
CustomerBlockHandler
{
public
static
CommonResult
handlerException1
(
BlockException
exception
)
{
return
new
CommonResult
(
4444
,
"按客戶自定义,global handlerException----1"
);
}
public
static
CommonResult
handlerException2
(
BlockException
exception
)
{
return
new
CommonResult
(
4444
,
"按客戶自定义,global handlerException----2"
);
}
}
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentFallbackService.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.service
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
org.springframework.stereotype.Component
;
/**
* @author lcry
* @date 2020/03/17 15:59
* Openfeign降级调用本方法
*/
@Component
public
class
PaymentFallbackService
implements
PaymentService
{
@Override
public
CommonResult
<
Payment
>
paymentSQL
(
Long
id
)
{
return
new
CommonResult
<>(
44444
,
"服务降级返回,---PaymentFallbackService"
,
new
Payment
(
id
,
"errorSerial"
));
}
}
cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentService.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.service
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
/**
* @author lcry
* @date 2020/03/17 15:59
*/
//openfeign调用nacos-payment-provider服务
@FeignClient
(
value
=
"nacos-payment-provider"
,
// 降级处理的方法
fallback
=
PaymentFallbackService
.
class
)
public
interface
PaymentService
{
@GetMapping
(
value
=
"/paymentSQL/{id}"
)
public
CommonResult
<
Payment
>
paymentSQL
(
@PathVariable
(
"id"
)
Long
id
);
}
cloudalibaba-consumer-nacos-order84/src/main/resources/application.yml
0 → 100644
浏览文件 @
2e21c2e0
server
:
port
:
84
spring
:
application
:
name
:
nacos-order-consumer
cloud
:
nacos
:
discovery
:
server-addr
:
localhost:8848
sentinel
:
transport
:
#配置Sentinel dashboard地址
dashboard
:
localhost:8080
#默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
port
:
8719
#sentinel持久化配置
datasource
:
ds1
:
nacos
:
server-addr
:
localhost:8848
dataId
:
${spring.application.name}
#nacos-order-consumer
groupId
:
DEFAULT_GROUP
data-type
:
json
rule-type
:
flow
# 持久化nacos需要写入下面配置内容
# [
# {
# "resource": "/hello", //资源名称
# "limitApp": "default", //限流应用名称
# "grade": 1,
# "count": 5,
# "strategy": 0,
# "controlBehavior": 0,
# "clusterMode": false //单台模式
# }
# ]
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url
:
nacos-user-service
:
http://nacos-payment-provider
# 激活Sentinel对Feign的支持
feign
:
sentinel
:
enabled
:
true
\ No newline at end of file
cloudalibaba-provider-nacos-payment9003/pom.xml
0 → 100644
浏览文件 @
2e21c2e0
<?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>
2020SpringCloud
</artifactId>
<groupId>
com.lcry
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<!-- 服务方注册进nacos并模拟数据库查询-->
<artifactId>
cloudalibaba-provider-nacos-payment9003
</artifactId>
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<!--引入自己定义的api调用包,可以使用Payment支付Entity-->
<dependency>
<groupId>
com.lcry
</groupId>
<artifactId>
cloud-api-commons
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-openfeign-core
</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9003.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
/**
* NacosPaymentMain9003
*
* @author lcry
* @date 2020/03/17 15:58
*/
@EnableDiscoveryClient
@SpringBootApplication
public
class
NacosPaymentMain9003
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
NacosPaymentMain9003
.
class
,
args
);
}
}
cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.controller
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
/**
* PaymentController
*
* @author lcry
* @date 2020/03/17 15:59
* 服务方模拟查询数据库
*/
@RestController
public
class
PaymentController
{
@Value
(
"${server.port}"
)
private
String
serverPort
;
public
static
HashMap
<
Long
,
Payment
>
hashMap
=
new
HashMap
<>();
static
{
hashMap
.
put
(
1L
,
new
Payment
(
1L
,
"28a8c1e3bc2742d8848569891fb42181"
));
hashMap
.
put
(
2L
,
new
Payment
(
2L
,
"bba8c1e3bc2742d8848569891ac32182"
));
hashMap
.
put
(
3L
,
new
Payment
(
3L
,
"6ua8c1e3bc2742d8848569891xt92183"
));
}
@GetMapping
(
value
=
"/paymentSQL/{id}"
)
public
CommonResult
<
Payment
>
paymentSQL
(
@PathVariable
(
"id"
)
Long
id
)
{
Payment
payment
=
hashMap
.
get
(
id
);
CommonResult
<
Payment
>
result
=
new
CommonResult
(
200
,
"from mysql,serverPort: "
+
serverPort
,
payment
);
return
result
;
}
}
cloudalibaba-provider-nacos-payment9003/src/main/resources/application.yml
0 → 100644
浏览文件 @
2e21c2e0
server
:
port
:
9003
spring
:
application
:
name
:
nacos-payment-provider
cloud
:
nacos
:
discovery
:
server-addr
:
localhost:8848
#配置Nacos地址
management
:
endpoints
:
web
:
exposure
:
include
:
'
*'
\ No newline at end of file
cloudalibaba-provider-nacos-payment9004/pom.xml
0 → 100644
浏览文件 @
2e21c2e0
<?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>
2020SpringCloud
</artifactId>
<groupId>
com.lcry
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<!-- cloudalibaba-provider-nacos-payment9003克隆版-->
<artifactId>
cloudalibaba-provider-nacos-payment9004
</artifactId>
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<!--引入自己定义的api调用包,可以使用Payment支付Entity-->
<dependency>
<groupId>
com.lcry
</groupId>
<artifactId>
cloud-api-commons
</artifactId>
<version>
${project.version}
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9004.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
/**
* NacosPaymentMain9004
*
* @author lcry
* @date 2020/03/17 15:58
*/
@EnableDiscoveryClient
@SpringBootApplication
public
class
NacosPaymentMain9004
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
NacosPaymentMain9004
.
class
,
args
);
}
}
cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.controller
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
/**
* PaymentController
*
* @author lcry
* @date 2020/03/17 15:59
* 服务方模拟查询数据库
*/
@RestController
public
class
PaymentController
{
@Value
(
"${server.port}"
)
private
String
serverPort
;
public
static
HashMap
<
Long
,
Payment
>
hashMap
=
new
HashMap
<>();
static
{
hashMap
.
put
(
1L
,
new
Payment
(
1L
,
"28a8c1e3bc2742d8848569891fb42181"
));
hashMap
.
put
(
2L
,
new
Payment
(
2L
,
"bba8c1e3bc2742d8848569891ac32182"
));
hashMap
.
put
(
3L
,
new
Payment
(
3L
,
"6ua8c1e3bc2742d8848569891xt92183"
));
}
@GetMapping
(
value
=
"/paymentSQL/{id}"
)
public
CommonResult
<
Payment
>
paymentSQL
(
@PathVariable
(
"id"
)
Long
id
)
{
Payment
payment
=
hashMap
.
get
(
id
);
CommonResult
<
Payment
>
result
=
new
CommonResult
(
200
,
"from mysql,serverPort: "
+
serverPort
,
payment
);
return
result
;
}
}
cloudalibaba-provider-nacos-payment9004/src/main/resources/application.yml
0 → 100644
浏览文件 @
2e21c2e0
server
:
port
:
9004
spring
:
application
:
name
:
nacos-payment-provider
cloud
:
nacos
:
discovery
:
server-addr
:
localhost:8848
#配置Nacos地址
management
:
endpoints
:
web
:
exposure
:
include
:
'
*'
\ No newline at end of file
cloudalibaba-sentinel-service8401/pom.xml
0 → 100644
浏览文件 @
2e21c2e0
<?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>
2020SpringCloud
</artifactId>
<groupId>
com.lcry
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<!--cloudalibaba使用nacos注册中心和sentinel限流和熔断案例-->
<artifactId>
cloudalibaba-sentinel-service8401
</artifactId>
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到-->
<dependency>
<groupId>
com.alibaba.csp
</groupId>
<artifactId>
sentinel-datasource-nacos
</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-sentinel
</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!--引入自己定义的api调用包,可以使用Payment支付Entity-->
<dependency>
<groupId>
com.lcry
</groupId>
<artifactId>
cloud-api-commons
</artifactId>
<version>
${project.version}
</version>
</dependency>
<!-- SpringBoot整合Web组件+actuator -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<scope>
runtime
</scope>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<version>
4.6.3
</version>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/SentinelServiceMain8401.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
/**
* SentinelServiceMain8401
*
* @author lcry
* @date 2020/03/17 14:51
* 测试Sentinel限流和熔断
*/
@EnableDiscoveryClient
@SpringBootApplication
public
class
SentinelServiceMain8401
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
SentinelServiceMain8401
.
class
,
args
);
}
}
\ No newline at end of file
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/FlowLimitController.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.controller
;
import
com.alibaba.csp.sentinel.annotation.SentinelResource
;
import
com.alibaba.csp.sentinel.slots.block.BlockException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.concurrent.TimeUnit
;
/**
* @author lcry
* @date 2020/03/17 14:51
* 路径限流测试
*/
@RestController
@Slf4j
public
class
FlowLimitController
{
@GetMapping
(
"/testA"
)
public
String
testA
()
{
return
"------testA"
;
}
@GetMapping
(
"/testB"
)
public
String
testB
()
{
log
.
info
(
Thread
.
currentThread
().
getName
()
+
"\t"
+
"...testB"
);
return
"------testB"
;
}
@GetMapping
(
"/testD"
)
public
String
testD
()
{
// try {
// TimeUnit.SECONDS.sleep(1);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// log.info("testD 测试RT");
log
.
info
(
"testD 异常比例"
);
int
age
=
10
/
0
;
return
"------testD"
;
}
@GetMapping
(
"/testE"
)
public
String
testE
()
{
log
.
info
(
"testE 测试异常数"
);
int
age
=
10
/
0
;
return
"------testE 测试异常数"
;
}
@GetMapping
(
"/testHotKey"
)
@SentinelResource
(
value
=
"testHotKey"
,
blockHandler
=
"deal_testHotKey"
)
public
String
testHotKey
(
@RequestParam
(
value
=
"p1"
,
required
=
false
)
String
p1
,
@RequestParam
(
value
=
"p2"
,
required
=
false
)
String
p2
)
{
//int age = 10/0;
return
"------testHotKey"
;
}
public
String
deal_testHotKey
(
String
p1
,
String
p2
,
BlockException
exception
)
{
//sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
return
"------deal_testHotKey,o(╥﹏╥)o"
;
}
}
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/RateLimitController.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.controller
;
import
com.alibaba.csp.sentinel.annotation.SentinelResource
;
import
com.alibaba.csp.sentinel.slots.block.BlockException
;
import
com.lcry.springcloud.entities.CommonResult
;
import
com.lcry.springcloud.entities.Payment
;
import
com.lcry.springcloudalibaba.myhandler.CustomerBlockHandler
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author lcry
* @date 2020/03/17 14:51
* 测试资源限流
*/
@RestController
public
class
RateLimitController
{
@GetMapping
(
"/rateLimit/byResource"
)
@SentinelResource
(
value
=
"byResource"
,
blockHandler
=
"handleException"
)
public
CommonResult
byResource
()
{
return
new
CommonResult
(
200
,
"按资源名称限流测试OK"
,
new
Payment
(
2020L
,
"serial001"
));
}
public
CommonResult
handleException
(
BlockException
exception
)
{
return
new
CommonResult
(
444
,
exception
.
getClass
().
getCanonicalName
()
+
"\t 服务不可用"
);
}
@GetMapping
(
"/rateLimit/byUrl"
)
@SentinelResource
(
value
=
"byUrl"
)
public
CommonResult
byUrl
()
{
return
new
CommonResult
(
200
,
"按url限流测试OK"
,
new
Payment
(
2020L
,
"serial002"
));
}
@GetMapping
(
"/rateLimit/customerBlockHandler"
)
@SentinelResource
(
value
=
"customerBlockHandler"
,
//资源名称
blockHandlerClass
=
CustomerBlockHandler
.
class
,
//异常自定义
blockHandler
=
"handlerException1"
)
//调用自定义类某个方法
public
CommonResult
customerBlockHandler
()
{
return
new
CommonResult
(
200
,
"按客戶自定义"
,
new
Payment
(
2020L
,
"serial003"
));
}
}
\ No newline at end of file
cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java
0 → 100644
浏览文件 @
2e21c2e0
package
com.lcry.springcloudalibaba.myhandler
;
import
com.alibaba.csp.sentinel.slots.block.BlockException
;
import
com.lcry.springcloud.entities.CommonResult
;
/**
* @author lcry
* @date 2020/03/17 14:51
* 用户自定义处理异常类
*/
public
class
CustomerBlockHandler
{
public
static
CommonResult
handlerException1
(
BlockException
exception
)
{
return
new
CommonResult
(
4444
,
"按客戶自定义,global handlerException----1"
);
}
public
static
CommonResult
handlerException2
(
BlockException
exception
)
{
return
new
CommonResult
(
4444
,
"按客戶自定义,global handlerException----2"
);
}
}
\ No newline at end of file
cloudalibaba-sentinel-service8401/src/main/resources/application.yml
0 → 100644
浏览文件 @
2e21c2e0
#测试端口
server
:
port
:
8401
spring
:
application
:
name
:
cloudalibaba-sentinel-service
cloud
:
nacos
:
discovery
:
server-addr
:
localhost:8848
#Nacos服务注册中心地址
sentinel
:
transport
:
dashboard
:
localhost:8080
#配置Sentinel dashboard地址
port
:
8719
#随机找一个地址,如果冲突就往后+1
# datasource:
# ds1:
# nacos:
# server-addr: localhost:8848
# dataId: cloudalibaba-sentinel-service
# groupId: DEFAULT_GROUP
# data-type: json
# rule-type: flow
management
:
endpoints
:
web
:
exposure
:
include
:
'
*'
feign
:
sentinel
:
enabled
:
true
# 激活Sentinel对Feign的支持
\ No newline at end of file
pom.xml
浏览文件 @
2e21c2e0
...
...
@@ -32,6 +32,10 @@
<module>
cloudalibaba-config-nacos-client3377
</module>
<module>
cloudalibaba-provider-nacos-payment9001
</module>
<module>
cloudalibaba-provider-nacos-payment9002
</module>
<module>
cloudalibaba-sentinel-service8401
</module>
<module>
cloudalibaba-provider-nacos-payment9003
</module>
<module>
cloudalibaba-provider-nacos-payment9004
</module>
<module>
cloudalibaba-consumer-nacos-order84
</module>
</modules>
<packaging>
pom
</packaging>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录