consul 作为服务注册与发现和配置中心

下载安装

  1. 下载地址:https://developer.hashicorp.com/consul/install?product_intent=consul

  2. 解压出来只有个 exe 文件,在这个目录打开 shell,consul --version 查看版本,consul agent -dev 开发模式启动

    启动后访问 localhost:8500 能正常访问到 consul 界面

小试牛刀

  1. 工程导入依赖

    <!--SpringCloud consul config 读取配置需要 -->
    <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>
    
    <!--SpringCloud consul discovery 注册服务需要 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 启动类使用注解

    @EnableDiscoveryClient // 当前工程注册到 consul
    @SpringBootApplication
    public class SpringbootApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootApplication.class,args);
        }
    }
    
  3. 配置文件,这里需要两个配置文件,一个常规的 application.xml,里面放 springboot 的配置,比如数据源、mapper、mvc 等,consul 作为配置中心需要 bootstrap.yml。application.yml 就不贴了,贴一下 bootstrap.yml

    spring:
      application:
        name: my-consul-test-service
        # consul 的配置放这里
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            service-name: ${spring.application.name}
          config:
            profile-separator: '-' # 工程和环境profile连接符是英文逗号‘,’太反人类了,至少国内没有这样的,这里改成短横线
            format: YAML
    
  4. 启动服务,consul 能看到 my-consul-test-service

  5. 到 consul 添加一个配置,看是否能读取到

    1. consul 的配置很特殊,总体格式为 config/服务,[环境]/data,分为三层: config、服务、data

    2. 比如 my-consul-test-service 服务,如果有两个环境一个是 dev,一个是 prod,就要这样创建 /config/my-consul-test-service,dev/data/config/my-consul-test-service,prod/data。服务与环境之间是逗号,我们在 pom 里面改成了 -

    3. 创建 data

  6. data 里就是真正的配置数据,随便写一个

  7. 工程中写个 controller,读取配置文件

    @RefreshScope // 动态刷新(默认55秒刷新一次,如果想实时,可以修改默认刷新时间)
    @GetMapping(value = "/testGetConfig")
    public String testGetConfig( @Value("${test.username}") String username){
        return username;
    }
    
  8. 访问接口测试

  9. 每次重启配置文件都会丢失,要把配置文件持久化下来才行,增加个配置就行。这玩意应该不是主流吧,感觉还是 nacos 是主流,服务注册不上去都还能跟源码,这个玩意不是java语言写的,好像是 go 吗?出问题看不了源码

posted @ 2024-07-13 10:55  CyrusHuang  阅读(2)  评论(0编辑  收藏  举报