領事の概要
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 から設定を取得して返すことがわかります。