1、部署Sentinel控制台
2、控制台和SpringCloud GateWay 的连接
3、在控制台中查看流控效果
首先去Sentinel的官网下载最新的控制台Jar包
https://github.com/alibaba/Sentinel/releases
使用命令启动,其中 -Dserver.port=8080
用于指定 Sentinel 控制台端口为 8080
注意机器上的JDK应为1.8+
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
我这儿为了避免和其他应用冲突,改为9001。
我是在windows上运行的,所以我写了个bat脚本来双击执行。
cd D:\Dev\workspace_csdn\
java -Dserver.port=9001 -Dcsp.sentinel.dashboard.server=localhost:9001 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.1.jar
成功运行起来
默认用户密码为 sentinel / sentinel
我们在上一章中的gateway网关工程中集成了Sentinel客户端来对API进行了限流,接下来就可以把客户端和控制台对接起来,这样就能在控制台中可视化地观测服务限流和熔断情况了。
首先在网关工程 (combat-gateway)中引入 控制台依赖
com.alibaba.csp
sentinel-transport-simple-http
然后启动我们的网关工程,启动前在【Run】-【Run Configuartion】 中加入 VM参数
-Dcsp.sentinel.dashboard.server=127.0.0.1:9001 -Dcsp.sentinel.app.type=1
-Dcsp.sentinel.dashboard.server 配置运行中的控制台IP:端口
-Dcsp.sentinel.app.type 设置当前应用为 网关类型 (因为我们是在gateway中使用sentinel)
然后我们针对上一章节写的接口进行测试
http://127.0.0.1:9000/nacos-provider/loadBanlance/print
以下代码实现 并发20 , 间隔1秒 的持续请求
package com.zjf.combat.sentinel;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class TestSentinel {
public static void main(String[] args) throws InterruptedException {
while(true) {
for (int i = 0; i < 20; i++) {
final int i1=i;
new Thread(() ->{
System.out.println((System.currentTimeMillis()/1000)+
"---"+i1+"---"+sendGetRequest("http://127.0.0.1:9000/nacos-provider/loadBanlance/print"));
}).start();
}
Thread.sleep(1000);
}
}
public static String sendGetRequest(String getUrl) {
StringBuffer sb = new StringBuffer();
InputStreamReader isr = null;
BufferedReader br = null;
try {
URL url = new URL(getUrl);
URLConnection urlConnection = url.openConnection();
urlConnection.setAllowUserInteraction(false);
isr = new InputStreamReader(url.openStream());
br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
br.close();
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
不同于上一章节的是,我们不用再到日志中去看了,直接在控制台中就可以看流控情况啦!
可以非常直观地看到,Sentinel把流量限制在 5 QPS (每秒允许5次请求),其余的15 都被限制了。