# sca_tech2021 **Repository Path**: fafi09/sca_tech2021 ## Basic Information - **Project Name**: sca_tech2021 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-29 - **Last Updated**: 2021-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README wget https://github.com/alibaba/nacos/releases --no-check-certificate ============nancos============== wget https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz --no-check-certificate sh startup.sh -m standalone http://152.136.122.15:8848/nacos ============jdk================== rpm -qa |grep java yum list java* sudo yum -y install java-1.8.0-openjdk which java ls -lrt /usr/bin/java ls -lrt /etc/alternatives/java export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH yum install java-devel ==================redis=================== wget http://download.redis.io/releases/redis-6.0.3.tar.gz tar -zxvf redis-6.0.3.tar.gz gcc -v #gcc 4.8.5需要升级 sudo yum -y install centos-release-scl sudo yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils #临时切换: scl enable devtoolset-9 bash #永久切换: echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile make install cd src ./redis-server #关闭服务 ./redis-cli shutdown ps -aux|grep redis kill -9 xxxx #把redis.conf 下载到本地进行修改简单方便 #1、更改默认端口 #由port 6379 改为 你自己定义的端口 #2、以后台进程方式启动 #修改daemonize no 为daemonize yes #3、设置redis远程连接 #(1)、先放行你设置的端口号 #(2)、注释掉bind 127.0.0.1 #(3)、设置redis连接密码:在requirepass foobard改为requirepass mzy1314520 #mzy1314520为设置的密码,这个密码尽量设置复杂些 #4 修改 protect-mode no tar.gz包提取某个文件 tar ztvf redis-6.0.3.tar.gz |grep redis.conf tar zxvf redis-6.0.3.tar.gz redis-6.0.3/redis.conf ./redis-server /home/lighthouse/redis-6.0.3/redis.conf 82.156.227.56:6489 152.136.122.15:6379 ===================install mysql sudo rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm sudo yum install mysql-server #启动MySQL systemctl start mysqld.service #查看MySQL运行状态 systemctl status mysqld.service #找出密码 grep "password" /var/log/mysqld.log Z5Cx7k:SrI:A #登陆 mysql -uroot -p #修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'Fafi_2009'; #开启mysql的远程访问 grant all privileges on *.* to 'root'@'%' identified by 'Fafi_2009' with grant option; flush privileges; exit 添加mysql端口3306和Tomcat端口8080 [root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent [root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent 然后再重新载入 [root@localhost ~]# firewall-cmd --reload ==============install seata 1. 下载 > wget https://github.com/seata/seata/releases/download/v1.4.1/seata-server-1.4.1.tar.gz 2. 修改file.conf 如果用nacos-config可以不修改 3. 修改registry.conf 4. 运行脚本nacos-config.sh 5. 后台启动 > nohup ./seata-server.sh --host 152.136.122.15 --port 8091 >log.out 2>1 & > nohup ./seata-server.sh --host 82.156.227.56 --port 8091 >log.out 2>1 & 6. 启动报错,内存不足 > 将start.sh文件内的虚拟机启动参数xmx,xms参数设小 7. 配置 > 注意tx-service-group名称要和config.txt里面的service.vgroupMapping一样 8. seata-server连接不上 > 云服务器防火墙端口未打开 9. seata参数 > store.db.url中如果db为mysql建议rewriteBatchedStatements=true --------------------------- --------------install sentinel 1. 下载 > wget https://github.com/alibaba/Sentinel/releases/download/1.8.1/sentinel-dashboard-1.8.1.jar 2. 启动 > nohup java -Dserver.port=8072 -Dcsp.sentinel.dashboard.server=152.136.122.15:8072 -Dcsp.sentinel.api.port=57125 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar &> sentinel.log 访问http://152.136.122.15:8072/ > 最后选择在本地运行,云服务器运行端口不同 > java -Dserver.port=8072 -Dcsp.sentinel.dashboard.server=192.168.8.142:8072 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar > 3. 问题 > a. sentinelSource的自定义限流失效 > 自定义方法的参数与业务方法的参数不匹配造成的,业务方法参数传有id,自定义的方法中也得传有id。 >[{ "resource": "dealff", "count": 1, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 }] >resource 指定为value ,sentinelSource annotation增加blockhandlerclass > >[{ "resource": "/dealf/get/{id}", "count": 1, "grade": 1, "limitApp": "default", "strategy": 0, "controlBehavior": 0 }] >SentinelResource注解的优先级要高于BlockExceptionHandler >BlockExceptionHandler 上面的resource要配置成 url形式 > >熔断 > CircuitBreakerStrategy.SLOW_REQUEST_RATIO ### 云服务器 82.156.227.56 1. 先启动nacos,再启动mysql ------------------------------ ### gateway #### 自定义filter 1. 创建类CustomerUrlGatewayFilter实现GatewayFilter 2. 创建类CustomerUrlGatewayFilterFactory 3. 以上类都要注册到spring容器 4. 在yml文件中应用CustomerUrl,必须是类的前缀 #### 整合sentinel 1. 添加依赖 ``` com.alibaba.csp sentinel-spring-cloud-gateway-adapter 1.7.2 ``` 2. 增加配置yml ``` sentinel: transport: port: 57125 dashboard: 192.168.8.142:8072 client-ip: 192.168.8.142 datasource: ds3: file: file: classpath:flowRule.json data-type: json rule-type: flow #system authority param-flow ``` 3. 增加配置类 > GatewayConfiguration 4. 自定义限流异常处理 ``` @Bean //@Order(-1) @Order(Ordered.HIGHEST_PRECEDENCE) public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler(BlockRequestHandler customizeBlockExceptionHandler) { // Register the block exception handler for Spring Cloud Gateway. GatewayCallbackManager.setBlockHandler(customizeBlockExceptionHandler); return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer); } ``` ``` @Bean(name = "customizeBlockExceptionHandler") public BlockRequestHandler customizeBlockExceptionHandler() { return new BlockRequestHandler() { @Override public Mono handleRequest(ServerWebExchange exchange, Throwable t) { Map valuemap = new HashMap<>(); valuemap.put("message","服务忙,限流"); return ServerResponse.status(HttpStatus.BAD_GATEWAY) .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(valuemap)); } }; } ``` ### druid多数据源配置 1. 在Spring 5.0以后,默认的数据连接池是Hikari 这货的配置参数使用的是jdbc-url,而不是我们平时使用的url 我们在进行配置多数据源的时候可能会报错:jdbcUrl is required with driverClassName 原因就是这个参数名应该使用jdbc-url。或者你可以使用别的连接池 如上面我使用的就是阿里的Druid,我们在构造数据源时可使用: return DruidDataSourceBuilder.create().build(); 也能解决该错误 2. 在mybatis的 sqlsessionfactorybean中把mapper注入进去 3. DataSourceProxy > http://note.youdao.com/s/SiBXuYLr --------------------------- ### feign配置 1. 出现如下错误: > Load balancer does not have available server for client > 解决方法:register-enabled 设置为true 否则feign不拉取服务 >cloud: nacos: discovery: server-addr: 152.136.122.15:8848 register-enabled: true 2. 错误: > springBoot 启动 If you want an embedded database > 解决方法: > 如果启动不需要数据库 > 方案1:@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//排除自动配置 > 方案2:将pom文件带有数据库相关的删除 --------------------------- ### idea同一个服务, 启动多个实例 > 修改app vm options : -Dserver.port=8081 --------------------------- ### 添加nacos 1. 添加discovery依赖 org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery 2. 在yml文件中配置 > cloud: nacos: discovery: server-addr: 127.0.0.1:8848 3. 开启 > @EnableDiscoveryClient # 问题 ## mybatis ### 1.@Mapper注解失效,导致service找不到dao,将mybatis.spring.boot.version改为2.1.3 ## 测试 ### postman #### 测试create方法出现Required request body is missing postman选择post body raw json { "name":"dfds", "total":7 } ### nacos #### 1. java.net.UnknownHostException > 没有用负载均衡 #### 2. No instances available for > 服务名写错,复制粘贴变好 > ## 部署 ### jar启动 java -jar -Dspring.profiles.active=XXX(配置文件名)(jar包名) ## gateway权限设置成功,测试 1. springsecurity中的oauthtoken取得token 2. teach2021中的gatewayseata插入数据成功 3. 修改了AuthorizationManager中的权限规则 4. 权限的限流也是成功的,flowrule"count": 1 ,改为0