登録センター/構成管理 - SpringCloud Consul

領事の概要

Consul は、サービス検出、ヘルスチェック、複数のデータセンター、キー/値ストレージを提供できる分散サービス フレームワークであり、分散システムの検出と構成を実現するために使用されます。Cousul は Go 言語を使用して実装されているため、移植性が高く、インストール パッケージには実行可能ファイルが 1 つだけ含まれており、起動時に直接実行できるため、展開が簡単です。


Consul のインストールと起動

Windows を例に挙げると、公式 Web サイトから 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 ページを表示して、サービスの登録が成功したことを確認します。


領事構成センター

前のセクションを参照して、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 構成ファイルに次の構成を追加します (ブートストラップを使用する必要があることに注意してください)。

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 管理インターフェイスに構成情報を追加し、左側のメニューで [キー/値] をクリックし、bootstrap.yml の構成に従って config/consul-service ディレクトリを作成し、consul-service ディレクトリにキー consul-service-config を作成します。値を追加します 構成情報

ここに画像の説明を挿入します

http://localhost:8080/getConfig をリクエストすると、サービスが Consul から設定を取得して返すことがわかります。

おすすめ

転載: blog.csdn.net/CSDN_handsome/article/details/132378229