springcloud常用配置(持续更新)

时间:2024-04-09 06:59:06

springcloud的优点不言而喻。在学习和工作中,在我们使用springcloud进行开发时,会涉及到众多技术栈的配置,那么本文就整理了日常所经常用到的一些配置信息。也会一直更新下去的。

注:该篇文章的格式是采用properties配置文件的类型进行描述的。如果使用yml文件,请自行修改格式。例如

eureka:

     client:

       fetch-registry

eureka常用参数:

eureka.client.register-with-eureka:是否向注册中心注册自己(true/false)

eureka.client.fetch-registry:是否获取服务清单(一般服务消费者设置为true,默认为true)

eureka.client.registry-fetch-interval-seconds=30 检测服务的时间,单位秒

eureka.client.serviceUrl.defaultZone=http://localhost:8080/eurekaServer 指定

enable-self-preservation:是否开启自我保护机制

eureka.client.eureka.enabled: 是否去用eureka客户端

eureka.client.registryFetchIntervalSecondes:从eureka服务端获取注册信息的间隔时间/s

eureka.client.healthcheck.enabled: 是否开启健康监测

 

自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:

1、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。

2、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。

3、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪

网卡设置

有的时候,对于服务发现注册,忽略某些命名的网络接口是非常有用的,比如使用Docker容器的时候。可以通过一些规则设置来忽略这些网络接口,下面这个配置显示了忽略“docker0”的入口,所有的入口以“veth.*”来匹配。

spring:

cloud:

inetutils:

ignoredInterfaces:

- docker0

- veth.*

spring.cloud.inetutils.preferred-networks: 192.168.239.

eureka.instance.prefer-ip-address:true

#启用SpringSecurity的安全配置

security:

sessions: always #always设置保存用户状态(内存可能会被占满) stateless设置不保存用户状态

basic:

enabled: true

user:

name: root

password: root

 

zuul:网关配置

zuul.routes.zuul-url.path=/zuul-url/**

zuul.routes.zuul-url.url=http://localhost:8080/

zuul.routes.zuul-url.path中的zuul-url是路由的名字,可自行替换。

 

面向服务的路由

zuul.routes.zuul-url.path=/zuul-url/**

zuul.routes.zuul-url.serviceId=test-service

上面的配置方式等同于 zuul.routes.test-service=/zuul-url/**

 

单实例配置

zuul.routes.zuul-url.path=/zuul-url/**

zuul.routes.zuul-url.serviceId=test-service

多实例配置

zuul.routes.zuul-url.path=/zuul-url/**

zuul.routes.zuul-url.serviceId=test-service

test-service.ribbon.listOfserver=http://localhost:8080/,http://localhost:8081/

通过使用ribbon实现了路由转发时的负载均衡策略。

 

由于zuul会自动为在eurekaServer中的每个服务都创建映射关系,但是当我们不想对某个服务进行路由转发时,可以通过

zuul.ignored-services来设置一个服务名匹配表达式,从而达到该服务不被转发。

自定义路由映射规则

zuul的路径是支持ant风格的表达式的

springcloud常用配置(持续更新)

(该图片截至《springcloud微服务实战-翟永超》)

 

另外,在实际工作中,可能会有多个路由规则映射到同一路由上,

比如,zuul.routes.test-service.path=/test-service/**

          zuul.routes.test-service.serviceId=test-service

 

          zuul.routes.test-service.path=/test-service/test1**

          zuul.routestest-service.serviceId=test-service-test1

这样如果访问/test-service/test1**,上面两个都会被匹配到。

因为路由规则是存放到LinkedHashMap里的。是进行排序的,而properties文件是无法保证顺序的。为了保证根据指定的路由规则进行转发。我们可以使用yml文件进行配置,读取yml文件时是从上至下进行读取的。

忽略表达式

zuul.ignored-patterns:该表达式可以设置某个路由不被api网关进行路由。

zuul.ignored-patterns=/**/hello/**

 

如果访问http://localhost:8080/test-service/hello/test,那么该url就不会被路由了。

路由前缀

zuul提供了zuul.prefix

zuul.prefix=/api   默认情况下,代理前缀不起作用,需要设置 zuul.stripPrefix=false。或者设置zuul.routes.<route>.strip-prefix=true 对指定的路由进行设置。

cookie问题

默认情况下,使用zuul进行路由的时候,会过滤掉http请求头的敏感信息,其中就包括cookie。防止传递到下游的外部服务器,可以设置zuul.sensitiveHeaders=,将该值设置为空,表示不过滤敏感信息。但是实际情况下有的服务会用到这些信息,而有的不需要,比如

登录功能需要用到cookie。这样我们可是设置

1.对指定路由开启自定义敏感头

zuul.routes.<router>.customSensitiveHeaders=true

2.将指定路由的敏感头设置为空

zuul.routes.<router>.sensitiveHeaders=

重定向

zuul.addHostHeader=true

Hystrix和Ribbon

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000

该参数可以用来设置api网关中路由转发请求的HystrixCommand执行超时时间,单位毫秒,

ribbon.ConnectTimeout=60000,如果该值小于hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds,会重新连接,知道到达hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds的时间。否则直接抛出异常。

ribbon.ReadTimeout=10000

bootstrap.yml 是被一个父级的 Spring ApplicationContext 加载的。这个父级的 Spring ApplicationContext是先加载的,在加载application.yml 的 ApplicationContext之前。

为何需要把 config server 的信息放在 bootstrap.yml 里?

当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。同时,某些配置如果已经加载过,那么后续后相同的配置,也不会加载了。