user-service的bootstrap.yml
spring:
cloud:
config:
# git仓库中,存放的配置文件 比如 user-service.yml,name = user ,profile = service
name: user
profile: service
# 配置文件在git仓库的分支 ,这里使用的是master主分支,如果自建分支 如dev1 ,需要修改此处 master为dev1
label: master
discovery:
enabled: true
# 指定spring cloud config server端的application name
service-id: config-server
# 监听rabbitMQ ,实现动态从gitee或者github仓库获取配置文件(远程仓库中修改配置文件之后,需要手动访问 http://localhost:12000/bus-refresh)
# localhost和12000是根据环境改变,bus-refresh不可改变,即使在config-server的配置中配置的bus-refresh也是不可变的
rabbitmq:
host: localhost
username: guest
password: guest
port: 5672
eureka:
client:
service-url:
# 注册到注册中心,指定eureka注册中心地址
defaultZone: http://127.0.0.1:10001/eureka
user-service的application.yml
spring:
application:
name: user-service
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring_boot
username: root
password: root
server:
port: ${port:8081}
mybatis:
type-aliases-package: com.itheima.pojo
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
instance:
ip-address: 127.0.0.1
prefer-ip-address: true
# 服务断线 90秒 不发送心跳 视为服务断线 ,如果springcloud的自我保护机制没有关闭,则会根据自我保护机制条件 决定是否进入自我保护状态
lease-expiration-duration-in-seconds: 90
# 30秒发送心跳 renew 状态刷新 自我保护机制(过去15分钟的连接到该服务的连接成功比高于85%就进入自我保护,如果没有 就会被剔除,大概是的)
lease-renewal-interval-in-seconds: 30
logging:
level:
com.itheima: debug
consumer-service的application.yml
spring:
application:
name: consumer-service
server:
port: ${port:8091}
# 设置eureka中ribbon的模式 默认为轮询,此时设置成随机; eureka中继承的ribbon
# 如果使用了feign组件集成的ribbon负载均衡组件,此处的配置仍然会作用到ribbon配置中.
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
# 配置熔断策略: 事实上这些数值 最大就是设置为2000,设置再大,从浏览器反馈的时间来看也是2秒,半秒也是可以的
hystrix:
command:
default:
circuitBreaker:
errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20
execution:
isolation:
thread:
timeoutInMilliseconds: 2000 # 熔断超时设置,默认为1秒
eureka:
client:
# 默认30秒 到eureka服务端拉取一次 服务注册列表 缓存本地
registry-fetch-interval-seconds: 30
service-url:
defaultZone: http://127.0.0.1:10001/eureka
# feign 内置的ribbon
ribbon:
ReadTimeout: 2000 # 读取超时时长 作用在服务提供端的,如果提供端2秒内未给出响应,视为超时
ConnectTimeout: 1000 # 建立链接的超时时长
MaxAutoRetries: 0 # 当前服务器的重试次数
MaxAutoRetriesNextServer: 0 # 重试多少次服务
OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试
feign:
hystrix:
enabled: true # 开启hystrix的熔断功能 默认关闭
# 开启请求和响应的GZIP数据压缩 默认关闭 以下压缩的参数均为默认值
compression:
request:
enabled: true # 请求压缩
mime-types: text/html,application/xml,application/json #请求压缩类型 默认值
min-request-size: 2048 #触发压缩的大小 下限,当达到该压缩大小时,开始压缩 默认值
response:
enabled: true # 响应压缩
logging:
level:
com.itheima: debug
gateway-server的application.yml
server:
port: 8100
spring:
application:
name: gateway-server
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins:
# 跨越规则,指定了下方可以跨域的浏览地址之后,该浏览地址通过ajax访问gateway,此处是8100,然后gateway在通过映射找到需要访问的服务
- "*" # 不支持通配符方式,但是支持一个整的*号
allowedMethods:
- GET
routes:
# 路由id 可以随便写,但是需要见名知意
- id: user-service
# 映射的地址 此处是uri 不是url 请注意!!!
# uri: http://127.0.0.1:8081
uri: lb://user-service # 代理的服务地址,代表该uri将会由loadBalance负责负载均衡策略
# 根据下面的断言 映射到上方的地址 如果匹配/user/**即可映射到http://127.0.0.1:8081/user/**
predicates:
# 匹配 /user/**
# - Path=/user/**
- Path=/user/**
# 局部过滤器 ,配置在配置文件中,对访问地址端口后面的前缀做处理
filters:
# 添加请求路径的前缀 前缀路径 访问localhost:8100/8 --> localhost:8081/user/8
- PrefixPath=/user
# 去除前缀个数 1代表去除端口后一个前缀,2代表去除2个 访问localhost:8100/app/user/8 --> localhost:8081/user/8
- StripPrefix=1 # 先添加/user 再删除/user 还是原来的,代表过滤器链可以成功执行
- MyParam=name
# 局部过滤器 配置在default-filters下,效果等同于 全局过滤器,但是真正意义上的全局过滤器不需要配置,并且实现的接口是 GlobalFilter
# 而配置在spring.cloud.gateway.routes.- id.routes下和spring.cloud.gateway.default-filters下的过滤器都是实现GatewayFilterFactory接口,严格意义上都称为局部过滤器
- id: consumer-service
uri: lb://consumer-service
predicates:
- Path=/consumer/**
default-filters:
# springcloud内置的过滤器,还有一个AddRequestParameters 不知道怎么设置参数
- AddRequestHeader=tokenReq,rinilaoniang # 在过滤器中往请求头中添加一个请求头 tokenReq
- AddResponseHeader=token111,rinixianrenbanban # 在过滤器中往响应对象中添加一个响应头 token
- AddRequestParameter=foo,bar #添加请求参数
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
# 设置ip优先
instance:
prefer-ip-address: true
# gateway 内置的ribbon 和feign内置的ribbon一样的配置
#ribbon:
# ReadTimeout: 2000 # 读取超时时长 作用在服务提供端的,如果提供端2秒内未给出响应,视为超时 ,也没有见到效果
# ConnectTimeout: 1000 # 建立链接的超时时长
# MaxAutoRetries: 0 # 当前服务器的重试次数
# MaxAutoRetriesNextServer: 0 # 重试多少次服务
# OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试
#gateway内置的hystrix 默认熔断超时时长是1秒 不生效的 假的; 官网提供的也无效,应该需要实现Hystrix的接口
#hystrix:
# command:
# default:
# excution:
# isolation:
# thread:
# 没生效,即使线程睡5秒也没有见到效果
# timeoutInMilliseconds: 1000
config-server的application.yml
server:
port: 12000
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/gouyao/springcloud_study.git
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10001/eureka
management:
endpoints:
web:
exposure:
# 暴露触发消息总线的地址 此处不是随意设置的,必须是bus-refresh,另外还有bus-env service-registry 需要自行了解
include: bus-refresh
eureka-server的application.yml
server:
port: ${port:10001}
spring:
application:
name: eureka_server
eureka:
client:
service-url:
defaultZone: ${defaultZone:http://127.0.0.1:10001/eureka} # 集群10001和10002 10001注册到10002 10002注册到10001
# 仅有一个服务的时候需要设置 拉取(查询)注册信息 为false,
fetch-registry: false
# 注解到eureka服务上,设置为false 这样 在查询eureka服务的时候,就不会显示自身,设置为true的话即使只有一个eureka,也会显示自己,自己注册自己
# 如果用于集群,上下两项参数需要设置为true,或者默认就是true,并且defaultZone 需要指向其余的所有的eureka服务
register-with-eureka: false
# 服务端检测到 服务注册列表中的服务心跳连接异常,默认60秒扫描一次,将超时未续约的注册列表清楚 (超时时间默认90s)
server:
eviction-interval-timer-in-ms: 3000
# eureka服务端的自我保护功能,默认开启,能有效避免因为网络波动造成的服务未续约
enable-self-preservation: true