在微服务里面,如果遇到2C的项目,特别是高流量高并发的系统的时候,我们有时候会涉及到使用sentinel进行限流。,这篇文章我们介绍下微服务项目如何集成sentinel。
如果需要使用sentinel的时候,主要有两个业务块,一个是sentinel dashboard,一个是sentinel core。dashboard是一个单独的服务,sentinel core是需要集成到项目中使用的。下面我们实战下项目如何集成。
一、首先启动dashboard
sentinel dashboard是一个单独的web服务,在形式上他只是一个单独的jar包而已,因此,我们只需要直接启动这个jar包即可。启动命令如下:
nohup java -jar -Dserver.port=29999 sentinel-dashboard-1.8.5.jar &
这个jar包的下载地址是:下载地址
执行了此命令之后,我们可以直接通过ip加端口的方式进行访问。我们这里访问的信息是:
http地址:192.168.31.30:29999 账号:sentinel 密码:sentinel
访问后,我们可以看到这里面是空的,为什么是空的呢?是因为没有任何项目集成到这个dashboard上,如果有项目集成到了当前的sentinel里面后,这里面就能看到具体的服务了。
二、集成项目到Sentinel控制平台上
这里我们用之前编写的一个spring cloud的demo项目测试下集成。后面我们附上代码的下载。
2.1、首先在user-service里面的maven poml里面添加sentinel的依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
2.2、然后我们在user-service里面添加上sentinel的配置
spring: cloud: sentinel: eager: true # 开启对sentinel看板的饥饿式加载。sentinel默认是懒加载机制,只有访问过一次的资源才会被监控,通过关闭懒加载,在项目启动时就连接sentinel控制台 transport: dashboard: 192.168.31.30:29999 #这里是sentinel的服务地址的配置
完整的user-service的application.yml内容是:
server: port: 9001 tomcat: max-threads: 500 max-connections: 500 shutdown: graceful spring: application: name: user-service main: allow-bean-definition-overriding: true lifecycle: timeout-per-shutdown-phase: 20s cloud: nacos: discovery: namespace: f186d312-2636-4372-b85d-a2c529b6a6d2 server-addr: 192.168.31.30:8848 #配置nacos地址 sentinel: eager: true # 开启对sentinel看板的饥饿式加载。sentinel默认是懒加载机制,只有访问过一次的资源才会被监控,通过关闭懒加载,在项目启动时就连接sentinel控制台 transport: dashboard: 192.168.31.30:29999
此时我们在项目中集成sentinel就完成了,接下来我们测试下项目。
三、启动user-service项目
我们直接在本地进行启动即可。
此时我们的项目启动起来了,我们去sentinel的dashboard上查看。
在这里我们就可以看到对应的user-service可以在sentinel dashboard里面显示出来了。后面的文章我们会介绍下如何具体配置对应的sentinel限流。
但是这里有一个很严重的问题,就是这个dashboard的是我们直接进行启动的,目前是没有进行数据持久化,那么如果我们到时候在里面配置了规则后,重启sentinel的jar服务,整个数据就会发生丢失。那我们这时候怎么办呢?
这里先提前说下:
1、这里的sentinel dashboard其实是没有任何持久化的,他每次启动的时候,所有的配置都需要各个服务上报,然后再进行显示。
2、持久化的操作是各个微服务进行配置的,相当于启动各个微服务的时候,首先去nacos里面去读取对应的配置,然后把这个配置信息上报给sentinel dashboard。
下面我们说下怎么做。
1)首先在微服务(例如user-service)的maven pom里面添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency>
2)修改spring-boot的配置文件application.yml,添加如下内容:
完整的配置信息是:
server: port: 9001 tomcat: max-threads: 500 max-connections: 500 shutdown: graceful spring: application: name: user-service main: allow-bean-definition-overriding: true lifecycle: timeout-per-shutdown-phase: 20s cloud: nacos: discovery: namespace: f186d312-2636-4372-b85d-a2c529b6a6d2 server-addr: 192.168.31.30:8848 #配置nacos地址 sentinel: eager: true # 开启对sentinel看板的饥饿式加载。sentinel默认是懒加载机制,只有访问过一次的资源才会被监控,通过关闭懒加载,在项目启动时就连接sentinel控制台 transport: dashboard: 192.168.31.30:29999 port: 8720 datasource: ds1: # 支持多种持久化数据源:file、nacos、zk、apollo、redis、consul nacos: server-addr: 192.168.31.30:8848 # naco服务地址 namespace: 798fedb2-921c-48a5-9a79-dd2b036c8c9e # 命名空间,根据环境配置 group-id: DEFAULT_GROUP # 这里我做了一下细分,不同规则设置不同groupId data-id: user-service-flow # 仅支持JSON和XML类型 data-type: json rule-type: flow # 规则类型:flow、degrade、param-flow、system、authority
3)去nacos对应命名空间里面添加user-service的flow配置文件
备注:这里的配置文件格式一定要选择json。
然后暂时先不启动服务,访问下sentinel下面对应的user-service服务,
可以看到服务没起来,也没有任何流控规则。此时我们启动下user-service
启动完了,然后我们去sentinel dashboard上再看看是否有刚才配置的流控规则。
流控的信息自动就显示出来了。此时我们去nacos里面修改下,去掉/hello1的流控。
看到/hello1自动消失了。
到此为止我们项目集成sentinel就完毕了。
最后附上代码下载:下载
还没有评论,来说两句吧...