consul作为配置中心

本文详细介绍了如何将Consul作为配置中心应用于Java后端项目中,包括引入依赖、配置bootstrap.yml文件、配置中心的使用及测试。通过Consul,可以实现配置的动态刷新,并提供了在开发、测试和生产环境下的不同配置策略。同时,文章指出在使用Consul时,@RefreshScope注解对于配置值刷新的重要性。
摘要由CSDN通过智能技术生成

 

Conusl可以作为注册中心,也可以作为配置中心。

作为配置中心,使用起来也很方便,大多数都是配置。

Consul的安装这里不说了,主要是说明java后端怎么使用,所以本次采用windows版本的consul。

 

引入和配置

2个文件:

 

pom配置:

<!-- consul配置中心 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-consul-config</artifactId>

</dependency>

 

<!-- 使用 @EnableConfigurationProperties 开启 @ConfigurationProperties 注解 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-configuration-processor</artifactId>

<optional>true</optional>

</dependency>

 

bootstrap.yml

 

spring:

  profiles:

    active: dev

  cloud:

    consul:

      host: 127.0.0.1  #注册中心的ip或host。也是集群地址,配置一个即可。注释掉整个consul这段就可以启动,即使没有注册中心也不报错。有这段就必须有一个可用的注册中心,否则启动报错

      port: 8500

      discovery:

        enabled: true #默认true。Consul Discovery Client是否注册到注册中心。和register同时设置成false,就不需要起consul服务。

        register: true #是否将服务注册到Consul集群中心.。这个参数和上面的enabled参数同时设置成false,应用才不会注册注册中心,才可以不起consul服务!

        deregister: true #默认true,服务停止时注销服务,即从服务列表中删除。设置成false的话,???

        #service-name: ${spring.application.name}  #注册在consul上面的名字,在consul的调用中,是通过此名字调用的。默认服务名,不要改

        instance-id: ${spring.application.name}-${spring.cloud.client.ip-address}:${server.port} #只供显示用,在ID列显示

        health-check-interval: 5s  #配置 Consul 健康检查频率,也就是心跳频率。

#        health-check-critical-timeout: 2s #健康检查失败多长时间后,取消注册。在node上显示红色叉。配了这个参数,如果consul集群的server重启会注销应用!

        #健康检查路径。默认是使用actuator的健康检查接口:http://localhost:8901/actuator/health返回{"status":"UP"}。其实只看http状态码是200就认为服务正常。你可以换成自己的一个rest接口替代actuator

        #health-check-path: /hello

        prefer-ip-address: true #表示注册时使用IP而不是hostname

      retry:

        initial-interval: 5000   # 服务监测时间间隔

        max-attempts: 20

      #consul作为配置中心,官网属性https://docs.spring.io/spring-cloud-consul/docs/2.2.4.RELEASE/reference/html/appendix.html

      config:

        enabled: true          # 启用 consul 配置中心.默认是true

        format: YAML           # 配置转码方式,默认 key-value,其他可选:yaml/files/properties

        data-key: data         # 配置 key 值,value 对应整个配置文件。例如config/application,dev/data

        prefix: config         # 基础文件夹,默认值 config.

        default-context: one  #应用文件夹,默认值 application,consul 会加载 config/<applicationName> 和 config/<defaultContext> 两份配置,设置为相同值,则只加载一份.sets the folder name used by all applications

#        profile-separator: '-'   #环境分隔符,默认值 ",例如例如config/application,dev/data修改后是config/application-dev/data

        watch:

         enabled: true         # 启用配置自动刷新

         delay: 1000           # 刷新频率,单位:毫秒

  servlet:

    multipart:

      enabled: true 

      max-file-size: 100MB

      max-request-size: 300MB

 

 

到此为止,consul作为配置中心就可以使用了。

要注意,consul作为配置中心,一些配置项在应用启动的时候就需要加载和初始化了,所以consul的配置必须写在bootstrap.yml

我们可以将welcom.value属性写入配置文件中,但要注意,配置中心的配置优先级高于本地配置文件.

如果本地配置文件不存在,配置中心也没有,启动会报错的.

注意,需要变更配置的类上,要加@RefreshScope注解,否则不会刷新配置。

(网上有人做实验,就是没有加@RefreshScope注解,所以才说@Value不会刷新consul修改后的值,只有@ConfigurationProperties才会。原因就是没有加@RefreshScope注解)

 

 

先说结论:consul作为配置中心,既然必须配置在bootstrap.yml,那地址只能写死了。如果有多个环境怎么办?其实一个配置中心也是支持多个环境的,配置中心就是把原来使用的bootstrap.yml,application.yml,application-dev.yml,application-test.yml搬到了consul的内存中而已,并且取值的优先级比这些配置文件高,其他使用并没有区别。

 

那么多个环境还是跟以前一样,通过

spring:

  profiles:

    active: dev

指定使用哪套配置就行了,没必要每个环境搭建一套consul。

实际情况,我们确实每个环境搭建了一套consul,毕竟生产环境和开发环境是物理隔离的。

对于bootstrap.yml里我们必须要按环境分开配置的项怎么办?我们可以使用环境变

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值