首页 > 其他分享 >注册中心/配置管理 —— SpringCloud Consul

注册中心/配置管理 —— SpringCloud Consul

时间:2023-08-19 11:55:05浏览次数:39  
标签:String service SpringCloud Consul 配置管理 public spring consul

Consul 概述

Consul 是一个可以提供服务发现,健康检查,多数据中心,key/Value 存储的分布式服务框架,用于实现分布式系统的发现与配置。Cousul 使用 Go 语言实现,因此天然具有可移植性,安装包仅包含一个可执行文件,直接启动即可运行,方便部署


Consul 安装与启动

以 windows 为例,在官网下载 Consul:https://www.consul.io/

下载之后解压缩,进入目录运行 consul.exe 即可:.\consul.exe agent -dev

Consul 启动完成后,在浏览器中访问 http://ocalhost:8500/ 便可以看到 Consul 首页


Consul 服务注册与发现

创建 cousul-service 项目,引入依赖,其中 Spring Boot Actuator 是健康检查需要依赖的包,本项目基于 SpringBoot 2.3.1,SpringCloud Hoxton.SR12

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
</dependencies>

在 application.yml 配置文件中添加如下配置:

server:
  port: 8080

spring:
  application:
    name: consul-service
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        instance-id: ${spring.application.name}:${server.port}

在启动类上添加注解 @EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
public class ConsulProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsulProducerApplication.class, args);
    }
}

启动项目,查看 Consul Web 页面,即可看到服务注册成功


Consul 配置中心

参考上一节内容创建 cousul-config 项目,引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
</dependencies>

在 bootstrap.yml 配置文件(注意必须使用 bootstrap)中添加如下配置:

server:
  port: 8080

spring:
  application:
    name: consul-service
  # profiles:
    # active: dev # 指定环境,默认加载 default 环境
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        instance-id: ${spring.application.name}:${server.port}
      config:
        enabled: true # false禁用Consul配置,默认为true
        format: yaml  # 表示consul上面文件的格式,有四种:YAML、PROPERTIES、KEY-VALUE、FILES
        prefix: config  # 可以理解为配置文件所在的最外层目录
        default-context: consul-service # 设置应用的文件夹名称
        data-key: consul-service-config # Consul的Key/Values中的Key,Value对应整个配置文件
        # 以上配置可以理解为:加载config/consul-service/文件夹下Key为consul-service-config的Value对应的配置信息
        # 配置环境分隔符,默认值 "," 和 default-context 配置项搭配
        # 例如应用 consul-service 分别有环境 default、dev、test、prod
        # 只需在 config 文件夹下创建 consul-service、consul-service-dev、consul-service-test、consul-service-prod 文件夹即可
        # profile-separator: '-'
        watch:
          enabled: true # 是否开启自动刷新,默认值true开启
          delay: 1000 # 刷新频率,单位毫秒,默认值1000

在启动类上添加注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
// 启用配置属性类,当SpringBoot程序启动时会立即加载@EnableConfigurationProperties注解中指定的类对象
@EnableConfigurationProperties({MySqlComplexConfig.class})
public class ConsulConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsulConfigApplication.class, args);
    }
}

定义 MysqlConfig 配置类

@Component
@ConfigurationProperties(prefix = "mysql")
public class MysqlConfig {

    private String host;
    private String username;
    private String password;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

开发 ConfigController

@RefreshScope // 用于重新刷新作用域实现属性值自动刷新
@RestController
public class ConfigController {

    @Autowired
    private MysqlConfig mysqlConfig;

    @GetMapping("getConfig")
    public Map<String, String> getMysqlConfig() {
        HashMap<String, String> map = new HashMap<>();
        map.put("host", mysqlConfig.getHost());
        map.put("username", mysqlConfig.getUsername());
        map.put("password", mysqlConfig.getPassword());
        return map;
    }
}

在 Consul 管理界面添加配置信息,点击左侧菜单的 Key/Value,按照 bootstrap.yml 中的配置创建 config/consul-service 目录,在 consul-service 目录下创建 key:consul-service-config,在 value 添加配置信息

请求 http://localhost:8080/getConfig,可以看到服务会从 Consul 中获取配置,并返回

标签:String,service,SpringCloud,Consul,配置管理,public,spring,consul
From: https://www.cnblogs.com/Yee-Q/p/17642272.html

相关文章

  • springcloud学习笔记
    springcloud2020开始取消英国地铁命名方式。 注册中心、配置中心:nacos服务调用:feign服务熔断:sentinel网关:gateway链路:sleuth ......
  • SpringCloud 微服务的协调者
    一、什么是SpringCloud1、功能:配置管理、服务注册、服务发现、断路器、智能路由、负载均衡、服务间调用、微代理、一次性令牌、思维导图模板、全局锁、领导选举、分布式消息、分布式会话、集群状态2、SpringCloud与SpringBoot的关系SpringBoot是构建SpringCloud架......
  • 2-04-Nacos配置管理-配置热更新-not practice
    所谓的热更新共有两种实现方式1.@Value+@Refresh针对单一类的配置热更新2.@ConfigurationProperties+@Autowired,针对所有类的配置热更新......
  • 2-05-Nacos配置管理-多环境配置共享-not practice
    单环境配置文件-${spring.application.name}-${spring.profiles.active}.yaml多环境配置文件-${spring.application.name}.yaml配置优先级:${spring.application.name}-${spring.profiles.active}.yaml>-${spring.application.name}.yaml>本地.yaml怀疑-待测:远程的两个可能......
  • 2-03-Nacos配置管理-微服务配置拉取
    增加nacos对应依赖增加bootstrap配置文件并迁移配置[应用名称-环境-文件后缀(用于组装出对应的dataID)以及nacos地址]清理application中重复的配置......
  • 2-02-Nacos配置管理-Nacos实现配置管理
    页面新增即可......
  • 注册中心 —— SpringCloud Netflix Eureka
    Eureka简介Eureka是一个基于REST的服务发现组件,SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务注册与发现,同时提供了负载均衡、故障转移等能力,目前Eureka2.0已经不再维护,故不推荐使用Eureka有两种角色组件:EurekaServer:服务注册中......
  • 使用Spring Cloud Config实现分布式系统的配置管理
    在分布式系统中,配置管理是一个重要的议题,不同的服务可能需要不同的配置参数,而这些配置参数可能会随时发生变化。SpringCloudConfig是一个用于集中式配置管理的工具,它可以帮助开发人员轻松地管理和更新分布式系统中的配置信息。本文将深入探讨如何使用SpringCloudConfig进行配置......
  • 【Eureka技术指南】「SpringCloud」从源码层面让你认识Eureka工作流程和运作机制(上)
    推荐超值课程:点击获取前言介绍了解到了SpringCloud,大家都应该知道注册中心,而对于我们从过去到现在,SpringCloud中用的最多的注册中心就是Eureka了,所以深入Eureka的原理和源码,接下来我们要进行讲解下eureka的源码分析,由此应运而产生的本章节的内容。基本原理EurekaServer提......
  • 【Eureka技术指南】「SpringCloud」从源码层面让你认识Eureka工作流程和运作机制(下)
    推荐超值课程:点击获取原理回顾EurekaServer提供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。EurekaClient是一个Java客户端,用于简化与EurekaServer......