consul配置中心、服务注册

简介

consul用于微服务下的服务治理,主要特点有:服务发现、服务配置、健康检查、键值存储、安全服务通信、多数据中心等

关于consul的安装和持久化就不再赘叙,有兴趣可以去windows+consul安装及持久化看一下

配置中心

添加maven依赖

<!--cloud consul 配置中心-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<!--cloud consul 注册发现-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

bootstrap-dev.yml(在bootstrap.yml中指定 spring.profiles.active=dev环境)

使用 Spring Cloud Consul Config,需要配置以下信息在 bootstrap-dev.yml 文件

  • spring.cloud.consul.host:配置consul地址
  • spring.cloud.consul.port:配置consul端口
  • spring.cloud.consul.config.prefix:配置基本文件,默认值config
  • spring.cloud.consul.config.enabled:启动consul配置中心
  • spring.cloud.consul.config.format:consul上面文件的格式 YAML、FILES、PROPERTIES、默认 KEY-VALUE
  • spring.cloud.consul.config.data-key:表示 consul 上面的 KEY 值(或者说文件的名字),默认是 data

具体说说spring.cloud.consul.config.prefix和data-key

  1. 访问下我们的consul地址,spring.cloud.consul.config.prefix,其实就是我们的目录,而config目录是如果不配置...config.prefix时默认的

在这里插入图片描述

  1. spring.cloud.consul.config.data-key是指文件的名称,默认是data

    在这里插入图片描述

例如
spring:
  cloud:
    consul:
      host: 192.168.0.104  # consul地址
      port: 8500
      config:
        prefix: config	  # consul目录前置
        enabled: true	  # 是否启用consul配置中心
        format: YAML	  # consul文件格式
        data-key: user    # consul文件名称
        
最后连接到的是  config/xxxx/user配置文件

那么上面的xxx又代表什么,再来看一个例子

server:
  port: 8000

spring:
  application:
    name: service-01		    # spring服务名
  cloud:
    consul:
      host: 192.168.1.11
      port: 8500
      config:
        prefix: manager-config  # consul配置前置
        enabled: true  			# consul启用配置中心
        format: YAML 			# 文件格式
        data-key: data			# 可以理解为是 文件名
         # watch选项为配置监视功能,主要监视配置的改变
        watch:
          enabled: true
          delay: 10000
          wait-time: 30

具体是什么关系呢?图解

在这里插入图片描述

其实在bootstrap-dev.yml中也可不指定prefix和data-key,不指定的话,prefix默认是config目录,data-key默认的是data文件

服务注册与发现

属性介绍

spring.cloud.consul.discovery.enabled:启用服务发现

spring.cloud.consul.discovery.register:启用服务注册

spring.cloud.consul.discovery.deregister:服务停止时取消注册

spring.cloud.consul.discovery.prefer-ip-address:表示注册时使用IP而不是hostname

spring.cloud.consul.discovery.health-check-interval:健康检查频率

spring.cloud.consul.discovery.health-check-path:健康检查路径

spring.cloud.consul.discovery.health-check-critical-timeout:健康检查失败多长时间后,取消注册

spring.cloud.consul.discovery.instance-id:服务注册标识

# 服务发现配置
discovery:
    # 启用服务发现
    enabled: true
    # 启用服务注册
    register: true
    # 服务停止时取消注册
    deregister: true
    # 表示注册时使用IP而不是hostname
    prefer-ip-address: true
    ip-address: 192.168.10.132
    # 执行监控检查的频率
    health-check-interval: 30s
    # 设置健康检查失败多长时间后,取消注册
    health-check-critical-timeout: 30s
    # 健康检查的路径
    health-check-path: /actuator/info
    # 服务注册标识,格式为:应用名称+服务器IP+端口
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

如果使用健康检查,不要忘记spring-boot-starter-actuator依赖,否则你的服务注册上去后会自动掉下来

<!--cloud consul 健康检查-->
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

实战练习

创建一个springboot项目,引入相关依赖

<!--cloud consul 配置中心-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

<!--cloud consul 注册发现-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

<!--springboot 依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--cloud consul 健康检查-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!--mysql依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>

配置文件

创建两个bootstrap文件,这里是分环境了,或者不分环境也可以(只创建bootstrap文件即可)

在这里插入图片描述

bootstrap.yml文件

spring:
  profiles:
    active: dev

bootstrap-dev.yml区分环境时,创建bootstrap-dev.yml文件配置(不分环境时,以下内容都写入bootstrap.yml中)

server:
  port: 8000

spring:
  application:
    name: cloud-module
  cloud:
    consul:
      host: 192.168.1.31
      port: 8500
      config:
        prefix: cloud-demo
        enabled: true
        format: YAML
        data-key: data
        # watch选项为配置监视功能,主要监视配置的改变
        watch:
          enabled: true
          delay: 10000
          wait-time: 30
      # 服务发现配置
      discovery:
        # 启用服务发现
        enabled: true
        # 启用服务注册
        register: true
        # 服务停止时取消注册
        deregister: true
        # 表示注册时使用IP而不是hostname
        prefer-ip-address: true
        ip-address: 192.168.1.31
        # 执行监控检查的频率
        health-check-interval: 30s
        # 设置健康检查失败多长时间后,取消注册
        health-check-critical-timeout: 30s
        # 健康检查的路径
        health-check-path: /actuator/info
        # 服务注册标识,格式为:应用名称+服务器IP+端口
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}

从以上配置文件看出consul配置的路径应该是

cloud-demo/cloud-module,dev/data

如果不区分环境,,dev可以不写
在这里插入图片描述

配置启动类

@SpringBootApplication
@EnableDiscoveryClient
public class CloudModuleApplication {

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

}

写个接口测试

@RestController
public class DbUserController {

    @Autowired
    public DbUserService dbUserService;

    @GetMapping("/user/{id}")
    public R<Object> getUser(@PathVariable Integer id) {
        DbUserEntity user = dbUserService.getById(id);
        return R.success(user);
    }
}

服务已经注册好了

在这里插入图片描述

调用接口测试一下

在这里插入图片描述

没问题,正常访问到数据库!!

服务已经注册到了consul上,并且使用consul作为服务的配置中心

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐