1.先把Sentinel克隆代码到本地
2.把克隆好的代码分支切换到release-1.7。如图所示:
3.通过idea工具打开克隆的项目(需要等待一段时间,maven需要下载很多依赖包)
4.项目导入成功后,打开sentinel-dashboard模块中的pom.xml,把sentinel-datasource-nacos依赖的scope那一行删掉(作用就是打包的时候把sentinel-datasource-nacos打进去,这样才能把规则写入nacos注册中心)
5.按照下图所示,把sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos这个包里面的所有java文件都复制sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule
6.如下图所示,把FlowControllerV2中的两个指定的名字分别改成FlowRuleNacosProvider对象和FlowRuleNacosPublisher对象对应的bean名称
7.修改前端代码:
这个修改是有原因的,没修改的时候是这样的:
修改后是这样的:
这样才能访问到FlowControllerV2。
至此,当前sentinel-dashboard可以访问localhost上的nacos实例,所以我们下一步需要修改成动态配置目标nacos
8.新增一个NacosProperties
package com.alibaba.csp.sentinel.dashboard.rule.nacos; import org.apache.commons.lang3.StringUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** @author zouwei */ @Component @ConfigurationProperties(prefix = "nacos.server") public class NacosProperties { private static final String NACOS_SERVER_ADDR = "NACOS_SERVER_ADDR"; private static final String NACOS_GROUP_ID = "NACOS_GROUP_ID"; private static final String NACOS_NAMESPACE = "NACOS_NAMESPACE"; private static final String NACOS_PORT = "NACOS_PORT"; private static final String NACOS_IP = "NACOS_IP"; private String ip = "localhost"; private String port = "8848"; private String namespace; private String groupId = "DEFAULT_GROUP"; public String getIp() { String nacosIp = getEnv(NACOS_IP); if (StringUtils.isNotBlank(nacosIp)) { return nacosIp; } return ip; } public void setIp(String ip) { this.ip = ip; } public String getPort() { String nacosPort = getEnv(NACOS_PORT); if (StringUtils.isNotBlank(nacosPort)) { return nacosPort; } return port; } public void setPort(String port) { this.port = port; } public String getNamespace() { String nacosNamespace = getEnv(NACOS_NAMESPACE); if (StringUtils.isNotBlank(nacosNamespace)) { return nacosNamespace; } return namespace; } public void setNamespace(String namespace) { this.namespace = namespace; } public String getGroupId() { String nacosGroupId = getEnv(NACOS_GROUP_ID); if (StringUtils.isNotBlank(nacosGroupId)) { return nacosGroupId; } return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getServerAddr() { String nacosServerAddr = getEnv(NACOS_SERVER_ADDR); if (StringUtils.isNotBlank(nacosServerAddr)) { return nacosServerAddr; } return this.getIp() + ":" + this.getPort(); } private static String getEnv(String key) { return System.getenv(key); } } 复制代码
9.修改以下三个类
10.添加nacos相关配置
这四个和nacos相关的配置根据自己的实际情况配置。
到这一步,就已经达到了动态配置目标nacos的目的了。接下来,就是打包和docker化。
11:打包
在idea中找到Terminal,进入sentinel-dashboard中,执行以下命令打包:
mvn clean package 复制代码
执行完毕后,在target中会生成sentinel-dashboard.jar,这个就是我们需要的jar包
12:准备好docker-compose.yml和Dockerfile
docker-compose.yml
version: "3" services: sentinel-dashboard: build: ./sentinel container_name: sentinel-dashboard ports: # 对应Dockerfile中的192.168.2.231:8086及8080端口配置 - "8086:8080" environment: # nacos服务地址及端口(根据自身情况配置) - NACOS_SERVER_ADDR=192.168.2.231:8848 # nacos服务namespace(根据自身情况配置) - NACOS_NAMESPACE=d1191f93-910a-47cc-8684-234e2b30909b # nacos服务group id(根据自身情况配置) - NACOS_GROUP_ID=SENTINEL_GROUP 复制代码
Dockerfile
FROM openjdk MAINTAINER 作者 <邮箱地址> RUN mkdir /usr/src/sentinel-dashboard COPY sentinel-dashboard.jar /usr/src/sentinel-dashboard WORKDIR /usr/src/sentinel-dashboard EXPOSE 8080 ENTRYPOINT ["java", "-Dserver.port=8080", "-Dcsp.sentinel.dashboard.server=192.168.2.231:8086", "-Dproject.name=sentinel-dashboard", "-jar", "sentinel-dashboard.jar"] 复制代码
以上配置中192.168.2.231:8086为宿主机IP和映射出来的8086端口,其实就是指向sentinel-dashboard服务,该配置可自定义。
13.启动sentinel-dashboard服务
执行以下命令启动服务:
docker-compose up -d sentinel-dashboard 复制代码
通过访问指定的192.168.2.231:8086进入sentinel登录页面
输入默认的用户名:sentinel 密码:sentinel
至此,就可以通过sentinel-dashboard和nacos就可以实现流控规则的持久化和动态配置了。