首页 > 其他分享 >SpringCloud使用Consul作为配置中心

SpringCloud使用Consul作为配置中心

时间:2023-04-08 19:56:51浏览次数:47  
标签:SpringCloud Consul 配置 spring config consul cloud

Consul提供了一个key/value存储,用于存储配置和其他元数据。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“bootstrap”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。根据应用程序的名称和模拟Spring Cloud配置顺序解析财产的活动配置文件创建多个PropertySource实例。例如,一个名为“testApp”、配置文件为“dev”的应用程序将创建以下属性源:

config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

最具体的属性源在顶部,最不具体的在底部。config/application文件夹中的配置适用于所有使用consul进行配置的应用程序。config/testApp文件夹中的配置仅对名为“testApp”的服务实例可用。

Consul增加配置

打开Consul界面,选中key/value,图示如下

 
点击右边Create按钮

文件夹要以/结尾。在config下新建consumer-dev文件夹,consumer是服务名,dev是所使用的环境,在consumer-dev新建配置文件:

key填consumerConfig,value填写配置数据。

SpringCloud整合Consul作配置中心

Consumer引入依赖:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-config</artifactId>
    </dependency>

       <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>

因为SpringCloud2020移除了spring-cloud-starter-bootstrap,要使用bootstrap.properties必须手动添加spring-cloud-starter-bootstrap依赖。将原来的application.properties内容移动到bootstrap.properties中:

server.port=8001
management.endpoints.web.exposure.include=*
spring.application.name=consumer
spring.cloud.consul.config.enabled=true
# 设置配置的基本文件夹,默认值config 可以理解为配置文件所在的最外层文件夹
spring.cloud.consul.config.prefixes=config
#设置应用的文件夹名称,默认值application 一般建议设置为微服务应用名称
spring.cloud.consul.config.default-context=${spring.application.name}
#配置环境分隔符,默认值","和default-context配置项搭配
spring.cloud.consul.config.profile-separator=-
#指定配置格式为yamL
spring.cloud.consul.config.format=yaml
#Consul Key/Values 中的Key, Value 对应整个配置文件
spring.cloud.consul.config.data-key=consumerConfig



spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

spring.cloud.consul.discovery.metadata.myfield=myvalue
spring.cloud.consul.discovery.metadata.anotherfield=anothervalue

spring.cloud.consul.discovery.instance-id=${spring.application.name}-${server.port}-${random.value}


spring.profiles.active=dev

在controller中使用:

@Value("${field}")
private String field;

@RequestMapping("/getField")
public String getField() {
    return field;
}

访问http://localhost:8001/getField,得到123

 
 

Consul配置监视利用了Consul监视密钥前缀的功能。Config Watch进行阻塞Consul HTTP API调用,以确定当前应用程序的任何相关配置数据是否已更改。如果有新的配置数据,则会发布“刷新事件”。这相当于调用/refresh执行器端点。Consul配置自动刷新的参数有三个:

spring.cloud.consul.config.watch.enabled=true  #开启配置自动刷新
spring.cloud.consul.config.watch.delay=1000    #配置自动刷新的间隔时间
spring.cloud.consul.config.watch.wait-time=55

上面三个参数都是默认值。

 

更改Consul配置中的field为1234567,访问http://localhost:8001/getField发现配置不是最新的。因为Controller类上没加@RefreshScope。加上重启后,再更改Consul配置中的field为1234567890,发现配置已是最新的。

快速失败

在某些情况下(如本地开发或某些测试场景),如果consul不可用于配置,则不失败可能很方便。设置spring.cloud.consu.config.fail-fast=false将导致配置模块记录警告,而不是引发异常。这将允许应用程序继续正常启动。

使用@ConfigurationProperties

增加配置如下:

新建配置类:

@ConfigurationProperties(prefix = "user")
@Component
public class UserConfig {

    private String name;


    private Integer age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserConfig{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

启动类添加@EnableConfigurationProperties,Controller使用:

@Autowired
private UserConfig userConfig;


@RequestMapping("/getUserConfig")
public String getUserConfig() {
    return userConfig.toString();
}

访问http://localhost:8001/getUserConfig,得到UserConfig{name='张三', age=18}。更改Consul配置中的age为20,访问访问http://localhost:8001/getUserConfig,得到UserConfig{name='张三', age=20},配置自动更新生效。controller要加@RefreshScope。

标签:SpringCloud,Consul,配置,spring,config,consul,cloud
From: https://www.cnblogs.com/shigongp/p/17298873.html

相关文章

  • 配置ssh免密登录
    配置ssh免密登录是为了将配置好的应用或文件直接分发到其他节点,不然一台一台的配置太慢了。 1在每台主机上生成公钥和私钥在所有节点上运行如下命令,运行完成后会在用户家目录下的.ssh目录下生成id_rsa(私钥文件)和id_rsa.pub(公钥文件)ssh-keygenssh-copy-id节点1IP地址ssh......
  • vue2源码-一、rollup环境配置
    npminit-y创建初始化package.json并修改script为"dev":"rollup-cw"安装rollup及其插件:npminstallrolluprollup-plugin-babel@babel/core@babel/preset-env--save-dev创建rollup.config.js对rollup进行配置:配置如下:importbabelfrom'rollup-plugin-bab......
  • CentOS7静态IP配置
    1编辑网卡配置文件vim/etc/sysconfig/network-scripts/ifcfg-ens33修改/添加如下选项,根据自己的情况BOOTPROTO=static #修改ip为静态,这是已有的配置,修改就好IPADDR=你想设置的ip #静态ip地址NETMASK=你的子网掩码 #子网掩码GATEWAY=你的网关 #网关地址DNS1=你的网关 ......
  • SpringCloud源码学习笔记3——Nacos服务注册源码分析
    系列文章目录和关于我一丶基本概念&Nacos架构1.为什么需要注册中心实现服务治理、服务动态扩容,以及调用时能有负载均衡的效果。如果我们将服务提供方的ip地址配置在服务消费方的配置文件中,当服务提供方实例上线下线,消费方都需要重启服务,导致二者耦合度过高。注册中心就是在......
  • Spring配置和依赖注入
    Spring配置别名<!--如果添加了别名,我们也可以使用其获取到这个对象--><aliasname="user"alias="gg"/>Bean的配置<!--name也是别名,可以取多个--><beanid="userT"class="com.kuang.pojo.UserT"name="userT2u,u1;u2&......
  • Sqoop下载安装配置
    下载Sqoop下载地址:https://archive.apache.org/dist/sqoop/安装Sqoop将Sqoop包上传,这里使用了Xftp进入Sqoop安装包目录,安装tar-zxvfsqoop-1.4.7.bin__hadoop-2.6.0.tar.gz为了方便,可以对Sqoop目录重命名mvsqoop-1.4.7.bin__hadoop-2.6.0sqoop配置环境变量vim/et......
  • Linux系统之普通用户sudo提权配置
    (Linux系统之普通用户sudo提权配置)一、检查本地系统版本检查本地环境的操作系统版本,本次实践为centos7.6版本。[root@docker~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME......
  • 『0002』 - Atom编辑器编写智能合约(Smart Contract)插件安装配置
    作者:黎跃春,编辑器选择理论上讲任何编辑器都可以编写Solidity合约代码,比如:WebStorm,VSCode,Sublime,等等。我选择的是Atom,没有任何理由,因为Atom轻量并且界面漂亮。移步https://atom.io/地址,下载安装Atom。autocomplete-solidity代码自动补齐linter-solium、linter-solidity代码错误检查......
  • 36.配置
    一.基本参数1.定义:在同一零件下通过配置可生成多个特征,典型的是标准件库;二.实际操作方式一.1,点击配置,先重命名现有的零件配置  ......
  • 配置Mysql允许远程访问
    配置Mysql允许远程访问 把Mysql安装在服务器上,然后在本地访问,发现提示Host'***'isnotallowedtoconnecttothisMySQLserver,错误提示很明确,就是目标主机上的Mysql服务不允许连接。1.打开命令提示符,执行Mysql-uroot-proot命令(如果提示Mysql不是内部或外部命令什么......