+ * http://localhost:9091/user/1
+ *
+ * @param id
+ * @return
+ */
+ @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
+ public Result getUserById(@PathVariable Integer id) {
+ return Result.ok(feignUserService.selectOne(id));
+ }
+
+ /**
+ * 获取配置的变量
+ * http://localhost:8086/sentinel/nameInfo
+ */
+ @GetMapping(value = "/nameInfo", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
+ public Result nameInfo() {
+ return Result.ok();
+ }
+
+ /**
+ * http://localhost:8086/sentinel/world
+ *
+ * @return
+ */
+ @GetMapping("/world")
+ @SentinelResource(value = "helloWorld", blockHandler = "helloBlock")
+ public String helloWorld() {
+ return "Hello world";
+ }
+
+ /**
+ * 回调地址
+ *
+ * @param e
+ * @return
+ */
+ public String helloBlock(BlockException e) {
+ return "你已被流控";
+ }
+}
\ No newline at end of file
diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java
new file mode 100644
index 0000000..5f44b39
--- /dev/null
+++ b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java
@@ -0,0 +1,47 @@
+package com.kwan.springcloudalibaba.handler;
+
+import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
+import com.alibaba.csp.sentinel.slots.block.BlockException;
+import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
+import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
+import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
+import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.kwan.springcloudalibaba.common.Result;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class UrlBlockHandler implements BlockExceptionHandler {
+
+ @Override
+ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {
+ String msg = null;
+ if (e instanceof FlowException) {//限流异常
+ msg = "接口已被限流";
+ } else if (e instanceof DegradeException) {//熔断异常
+ msg = "接口已被熔断,请稍后再试";
+ } else if (e instanceof ParamFlowException) { //热点参数限流
+ msg = "热点参数限流";
+ } else if (e instanceof SystemBlockException) { //系统规则异常
+ msg = "系统规则(负载不满足要求)";
+ } else if (e instanceof AuthorityException) { //授权规则异常
+ msg = "授权规则不通过";
+ }
+ httpServletResponse.setStatus(500);
+ httpServletResponse.setCharacterEncoding("UTF-8");
+ httpServletResponse.setContentType("application/json;charset=utf-8");
+ //ObjectMapper是内置Jackson的序列化工具类,这用于将对象转为JSON字符串
+ ObjectMapper mapper = new ObjectMapper();
+ //某个对象属性为null时不进行序列化输出
+ mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+ mapper.writeValue(httpServletResponse.getWriter(),
+ Result.error(300, msg)
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/nacos-server-gateway/src/main/resources/bootstrap.yml b/nacos-server-gateway/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..0919312
--- /dev/null
+++ b/nacos-server-gateway/src/main/resources/bootstrap.yml
@@ -0,0 +1,34 @@
+#端口号
+server:
+ port: 8088
+
+#spring配置
+spring:
+ application:
+ name: nacos-server-sentinel-consumer
+ profiles:
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ server-addr: http://120.79.36.53:8848 #服务注册地址
+ config:
+ server-addr: http://120.79.36.53:8848 #配置中心地址
+ file-extension: yaml #文件类型
+ group: DEV_GROUP #组别
+ namespace: 4cd9bd32-8f25-45cd-b919-df1a0df146e0 #命名空间
+ refresh-enabled: true #默认自动刷新
+ sentinel:
+ transport:
+ dashboard: 127.0.0.1:8181
+ port: 8719 #默认端口,如果被占用则从8719依次+1扫描
+ datasource:
+ ds1:
+ nacos:
+ server-addr: http://120.79.36.53:8848
+ username: nacos
+ password: nacos
+ dataId: nacos-server-sentinel-consumer # 微服务名称
+ groupId: DEFAULT_GROUP
+ data-type: json
+ rule-type: flow # 流控规则
\ No newline at end of file
diff --git a/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java b/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java
new file mode 100644
index 0000000..9a5f4be
--- /dev/null
+++ b/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java
@@ -0,0 +1,13 @@
+package com.kwan.springcloudalibaba;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SentinelConsumerApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/nacos-server-sentinel-consumer/src/main/resources/bootstrap.yml b/nacos-server-sentinel-consumer/src/main/resources/bootstrap.yml
index e2c6ba1..fa7dfb5 100644
--- a/nacos-server-sentinel-consumer/src/main/resources/bootstrap.yml
+++ b/nacos-server-sentinel-consumer/src/main/resources/bootstrap.yml
@@ -11,9 +11,9 @@ spring:
cloud:
nacos:
discovery:
- server-addr: localhost:8848 #服务注册地址
+ server-addr: http://120.79.36.53:8848 #服务注册地址
config:
- server-addr: localhost:8848 #配置中心地址
+ server-addr: http://120.79.36.53:8848 #配置中心地址
file-extension: yaml #文件类型
group: DEV_GROUP #组别
namespace: 4cd9bd32-8f25-45cd-b919-df1a0df146e0 #命名空间
@@ -25,7 +25,9 @@ spring:
datasource:
ds1:
nacos:
- server-addr: localhost:8848
+ server-addr: http://120.79.36.53:8848
+ username: nacos
+ password: nacos
dataId: nacos-server-sentinel-consumer # 微服务名称
groupId: DEFAULT_GROUP
data-type: json
diff --git a/pom.xml b/pom.xml
index 5ec25d0..80446cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,7 @@