再注解生效激活。
java编译版本选择
文件类型过滤(将不想看到的没什么用的文件过滤掉)
构建支付模块。(建module、改POM、写YML、主启动、业务类)
多个模块需要Run DashBoard(启动全部),因为每个模块都有一个Run。
热部署。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<fork>truefork>
<addResources>trueaddResources>
configuration>
plugin>
plugins>
build>
勾勾全部打上。
ctrl+alt+shift+/ 后点击Register,把下面两个勾勾打上。
<option name="configurationTypes" />
<set>
<option value="SpringBootApplicationConfigurationType"/>
set>
option>
<dependency>
<groupId>com.syf.studygroupId>
<artifactId>cloud-api-commonsartifactId>
<version>${project.version}version>
dependency>
spring:
application:
name: cloud-pay-service
在引入了spring-cloud依赖的前提下:
客户端
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
服务端
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
注册进eureka
eureka:
client:
#表示是否将自己注册进EurekaServer默认为ture
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
如果是eureka的server端,则上面两个ture可以都改为false。(如果是在一台电脑上测试集群需在C:\Windows\System32\drivers\etc\hosts下修改配置:在最后面加上映射####################springCloud2021########################
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com)
jmeter.bat
服务降级
@HystrixCommand(fallbackMethod = "payment_errorhandler",//如果这个方法出问题了(不管超时还是其他异常),找那个方法兜底
commandProperties = @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000"))//设置超时时间,这里设置3秒,超过3秒就算异常
public String payment_ERROR(Integer id){
int time=5;
try {
TimeUnit.SECONDS.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "线程池"+Thread.currentThread().getName()+"payment_ERROR,id="+id+"`````````````````````````";
}
public String payment_errorhandler(Integer id){
return "线程池"+Thread.currentThread().getName()+"payment_ERROR,id="+id+"??????????????????????????";
}
服务熔断
#搭建好后访问该网址http://config-3344.com:3344/master/application-dev.yaml的意义为
# 其中config-3344.com:3344为访问ip+port,master为分支,application-dev.yaml为访问的文件
中心
# rabbitmq的相关配置
rabbitmq:
host: 116.62.34.43
port: 5672
username: guest
password: guest
# rabbitmq的相关配置 暴露刷新配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
客户
# rabbitmq的相关配置
rabbitmq:
host: 116.62.34.43
port: 5672
username: guest
password: guest
请求链路跟踪
docker run -d \
-e PREFER_HOST_MODE=hostname \
-e MODE=cluster \
-e NACOS_SERVER_PORT=8846 \ #本次端口
-e NACOS_SERVERS="192.168.1.131:8846 192.168.1.131:8847 192.168.1.131:8848" \ #集群
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.131 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_IP=192.168.1.131 \
-p 8846:8846 \
--name my-nacos1 \
nacos/nacos-server:1.2.1
原文链接:https://blog.csdn.net/BDawn/article/details/106234675
设置好内容后重启可能不生效,直接使用挂载。
mkdir -p /mydata/nacos/logs/ # 新建logs目录
mkdir -p /mydata/nacos/init.d/
vim /mydata/nacos/init.d/custom.properties # 修改配置文件
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
# 这里要对应ip,以及对应的数据库
db.url.0=jdbc:mysql://dockermysqlIP:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=sql用户名
db.password=sql密码
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
这里面有一个坑,如果sentinel放在外网,微服务放在内网测试的时候,能连接成功,但是监测不到。报Failed to fetch metric from http://183.230.12.227:8719/metric?startTime=1637209907000&endTime=1637209913000&refetch=false (ConnectionException: Connection timed out)错误。要么把他们放本地,要么把微服务放云。
这里需注意如果使用OpenFeign跑时,如果mapping中没有fallback,只有
openFeign的全局捕获和控制台错误捕获是捕获不了运行时异常的。
"resource":"/rateLimit/byUrl", #资源名称
"limitApp":"default", #来源应用
"grade":1, #阈值类型,0表示线程数,1表示QPS
"count":0, #单机阈值
"strategy":0, #流控模式,0表示直接,1表示关联,2表示链路
"controlBehavior":0, #流控效果,0表示快速失败,1表示Warm Up,2表示排队等待
"clusterMode":false #是否集群