後半にリリース領事は、物流センターの機能を置き換え、それでも春クラウドコンフィグプロジェクトに適しことができますが、春の雲春の雲コンフィグは、最も古い家族のセンタの構成で、機能を簡単な構成で実現することができます。
プロファイルは、特に春ブーツプロジェクト私たちに馴染みのある、対応するMavenのパッケージの導入に加えて、残りの作業は、mysqlの、Redisの、セキュリティ関連の設定などの設定ファイルを、改善することです。実行中の基本的な設定項目に加えて、いくつかの私たちのビジネス関係の構成を例示したが、例えば、7頭の牛の保存、メール関連に関連するSMS、またはいくつかのビジネス上のスイッチがあります。
いくつかの単純なプロジェクトでは、我々は一般的に、直接、別の構成ファイル内の設定に関連する、プロパティまたはYML形式に表示され、道の人生は本当ににおけるapplication.propertiesまたはapplication.ymlに、より直接的です。設定を変更する場合でも、重大な問題があるこの方法は、つまり、あなたはそれ以外の設定を有効にすることはできません、サービスを再起動する必要があります。
春の雲Configを、より強力なこれらのセンターの構成と比較などCtripのアポロ、アリゴールドのドレスdisconf、オープンソースとして構成センターのより多くの使用は、多数あります。興味はそれを試してみるために使用することができます。
次に、我々は春ブーツ春クラウドコンフィグプロジェクトに統合すると、コンフィギュレーションメモリとしてGitHubのようになりました。Gitはさらに、データベースは、ローカルファイルとして保存され、SVNを使用することができます。主に次の3つの用語の使用についてのコンフィグ。
1.中心(ユーレカが組み込まれていない)の基本構成。
2.構成ユーレカ中心の結合バージョンは、
3.自動更新の設定を実現。
最も単純な構成のセンターを実現するために、
最も単純な構成のセンター、サービス側の設定を取得するためにクライアントとしてサービスの構成を取得するには、それぞれの必要性の後、サービス側としてサービスを開始することです。
まず、githubの構成ファイルに設立
私のために作成された倉庫住所:物流センターの倉庫
次のようにディレクトリ構造は次のとおりです。
コンテンツプロファイル、実質的に以下のように、区別するために、わずかに異なります。
data:
env: config-eureka-dev
user:
username: eureka-client-user
password: 1291029102
ファイルの名前を注意することは、上記の設定・シングルクライアントdev.ymlと設定-シングルクライアントprod.yml同じプロジェクトの2つの異なるバージョン、設定・シングルクライアントのプロジェクト名として、混沌によって演奏されていません、開発版と正式版のための1に相当します。コンフィグ-ユーレカ・クライアントdev.ymlと設定-ユーレカ・クライアントprod.ymlは別のプロジェクトで、プロジェクト名を設定-ユーレカ・クライアントです。
コンフィギュレーション・センター・サーバーを作成します。
1、新しい春のブートプロジェクトは、コンフィグサーバとスターター・ウェブを導入しました
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring cloud config 服务端包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
関連2、コンフィギュレーション設定の設定項目
bootstrap.ymlファイル
spring:
application:
name: config-single-server # 应用名称
cloud:
config:
server:
git:
uri: https://github.com/huzhicheng/config-only-a-demo #配置文件所在仓库
username: github 登录账号
password: github 登录密码
default-label: master #配置文件分支
search-paths: config #配置文件所在根目录
application.yml
server:
port: 3301
3は、アプリケーションの起動クラスの増加に関連付けられている注釈 @EnableConfigServer
@SpringBootApplication
@EnableConfigServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
サービス、次のテストを開始します。
春クラウドコンフィグは、アクセスルールの独自のセットを持って、我々はルールのこのセットは、ブラウザで直接アクセスすることができます採用しました。
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
{アプリケーション}は、アプリケーション名であるプロファイルアップに対応する、私の上に作成した設定ファイルの例のために、ファイルの名前を設定することです。
このようなアプリケーション-dev.yml、用途向けとしてバージョン{プロファイル}は私たちのプロジェクトの開発版、テスト環境のバージョン、製品バージョンのプロファイルで、コンフィギュレーション・ファイルに対応する{プロファイル} .yml区別を応用 - まであります、 sit.yml、アプリケーションprod.yml。
{ラベル}デフォルトはmasterブランチで、gitのブランチを表し、枝プロジェクトは区別が可能であることを確認することであるならば、それは別のラベルによって異なる設定ファイルへのアクセスを制御することができます。
私がここに持っているので、上記の5つの規則は、我々は、最初の3を見てYMLプロファイルの形式があります。これらの3つのルールによると、私たちは次のアドレスで、設定ファイルの内容を表示することができます。
http:// localhostを:3301 / configに-シングルクライアントの/ dev /マスター
http:// localhostを:3301 / configに-シングルクライアント/ PROD
http:// localhostを:3301 / configに-シングルクライアントdev.yml
http:// localhostを:3301 / configに-シングルクライアントprod.yml
http:// localhostを:3301 /マスター/ configの-シングルクライアントprod.yml
上記のアドレスにアクセスすることにより、データはすべてが正常であるサーバセンターを構成し、その後、通常の状態に戻すことができます。
コンフィギュレーションを使用して、コンフィギュレーション・センター・クライアントを作成します。
Configuration Centerのサーバーまあ、コンフィギュレーション・データは、私たちのプロジェクトでそれを使用する必要があり、次の、準備ができています。
1、参照関連Mavenのパッケージ。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring cloud config 客户端包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、初期設定ファイル
bootstrap.yml
spring:
profiles:
active: dev
---
spring:
profiles: prod
application:
name: config-single-client
cloud:
config:
uri: http://localhost:3301
label: master
profile: prod
---
spring:
profiles: dev
application:
name: config-single-client
cloud:
config:
uri: http://localhost:3301
label: master
profile: dev
コンフィギュレーションの2つのバージョンで構成されており、現在、本実施形態で用いるspring.profiles.active、例えばDEVバージョンによって使用されるバージョンを設定します。
application.yml
server:
port: 3302
management:
endpoint:
shutdown:
enabled: false
endpoints:
web:
exposure:
include: "*"
data:
env: NaN
user:
username: NaN
password: NaN
どこの管理は、あなたがそれを必要とするとき、次の自動更新の設定に関連付けられたアクチュエータについてです。
データ部分は、あなたがこの構成では、物流センターの構成を読み取ることができないので、プロジェクトが開始できないときです。
図3は、中央のコンフィギュレーションの内容を読み取るに関連するクラスの構成を追加、スプリングクラウド構成は、構成中心を読み取り、正確に同じであるようローカルプロファイルコンフィギュレーションの内容を読み取ります。@valueまたは@ConfigurationPropertiesすることによって得ることができます。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.関連するクラスの設定を追加して、中央の構成の内容を読み取るために、春クラウドconfig設定センターを読み取り、ローカルプロファイルの設定がまったく同じである方法の内容を読み取ります。@valueまたは@ConfigurationPropertiesすることによって得ることができます。
@valueの方法を使用します。
@Data
@Component
public class GitConfig {
@Value("${data.env}")
private String env;
@Value("${data.user.username}")
private String username;
@Value("${data.user.password}")
private String password;
}
@ConfigurationPropertiesの方法を使用します。
@Component
@Data
@ConfigurationProperties(prefix = "data")
public class GitAutoRefreshConfig {
public static class UserInfo {
private String username;
private String password;
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;
}
@Override
public String toString() {
return "UserInfo{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
private String env;
private UserInfo user;
}
4、RESTControllerを構成するために使用される追加試験
@RestController
public class GitController {
@Autowired
private GitConfig gitConfig;
@Autowired
private GitAutoRefreshConfig gitAutoRefreshConfig;
@GetMapping(value = "show")
public Object show(){
return gitConfig;
}
@GetMapping(value = "autoShow")
public Object autoShow(){
return gitAutoRefreshConfig;
}
}
5、プロジェクトの起動クラス
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
プロジェクトを開始し、RESTfulなインターフェースにアクセス
http:// localhostを:3302 /ショー、次のような結果は次のとおりです。
{
"env": "localhost-dev-edit",
"username": "fengzheng-dev",
"password": "password-dev"
}
http:// localhostを:3302 / autoShow、次のような結果は次のとおりです。
{
"env": "localhost-dev-edit",
"user": {
"username": "fengzheng-dev",
"password": "password-dev"
}
}
自動リフレッシュ
ブート構成項目の内容でロードされたこのメカニズム春クラウドコンフィグが、それは、欠陥の存在に変更したコンフィギュレーションファイルの内容をリードし、自動的に更新されません。例えば、我々はサービスがgithubの上の設定ファイルの内容を変更するために、開始されたとき、この時間は、再びページを更新し、上記プロジェクトでは、私は申し訳ありませんが、古い構成や内容だけど、新しいコンテンツがオーバーリフレッシュするためのイニシアチブを取ることはありません。
しかし、あなたは常にサービスを再起動後に設定を変更することはできません。それはケースだ、または利益のためにそれを使用しない場合は、ローカルプロファイルを直接使用することは、より高速ではないでしょう。
これは、リフレッシュ・メカニズムを提供しますが、我々はトリガイニシアチブを取る必要があります。これは、ばねブートスターター・アクチュエータパッケージの導入に注意を払う、アクチュエータと組み合わせ@RefreshScopeノートです。
1は、設定クライアント側の設定で構成されたアクチュエータを高め、あなたはおそらく上記気づきました。
management:
endpoint:
shutdown:
enabled: false
endpoints:
web:
exposure:
include: "*"
実際には、ここでは、このインタフェースの更新の主な用途は、
2、クラス@RefreshScopeのコメントの設定を読み込む必要の増加は、我々はコントローラを設定し、そのコントローラに追加するために使用されています。
@RestController
@RefreshScope
public class GitController {
@Autowired
private GitConfig gitConfig;
@Autowired
private GitAutoRefreshConfig gitAutoRefreshConfig;
@GetMapping(value = "show")
public Object show(){
return gitConfig;
}
@GetMapping(value = "autoShow")
public Object autoShow(){
return gitAutoRefreshConfig;
}
}
上記は、クライアント側の修正で行われることに注意してください。
その後、クライアント側を再起動し、再起動後、我々はgithubの上のコンフィギュレーションファイルの内容を変更し、変更をコミットし、再び応答をページを更新しません。問題ありません。
次に、我々は、httpにPOSTリクエストを送信:// localhostを:3302 /アクチュエータ/次のように返され、あなたは、このインターフェイスは、新しいコンフィギュレーションをロードするトリガするために使用され、郵便配達などのツールを使用することができ、このインタフェースを更新します。
[
"config.client.version",
"data.env"
]
その後、再びRESTfulなインターフェースにアクセスは、http:// localhostを:3302 / autoShow働いリフレッシュメカニズムを示すデータが最新である取得するために、このインターフェイス。
http:// localhostを:3302 /ショー取得または古いデータ、達成される@value注釈があり、それゆえ、私たちは、コンフィギュレーションをロードするためのプロジェクトで、このアプローチを使用しないでください。
githubのにウェブフックを設定します
それがこの終了後、ノー、私たちは常に、設定を変更することはできません、それを更新し界面で郵便配達のアクセスを使用するか、それが十分に便利ではありません。githubのは、コードの変更がある場合、我々は我々が達成したい目的を達成するために設定したアドレスを呼び出します、ウェブフックの方法を提供します。
1、githubのリポジトリの設定ページに、ウェブフックを選択して、ウェブフックの追加]をクリックします。
図2は、次に、コールバック・アドレスを入力、すなわち、上記アクチュエータ/このアドレスを更新するが、アドレスはgithubのにアクセスできることを保証しなければなりません。ネットワークは、他に方法がない場合。これが唯一の実証プロジェクトは、一般的な企業内であろう、このような自作のgitlabなど、独自のコード管理ツールを、持っている、gitlabあなたがネットワーク内のアドレスに呼び出すことができるように、機能がウェブフックされます。
春の雲バスは、複数のエンドを更新し、自動的に使用します
軽量メッセージブローカリンク分散システムと春クラウドバスノード。これは、ブロードキャスト(例えば、構成変更)コマンド、または他の管理のステータスを変更するために使用することができます。主要なアイデアは、分散アクチュエータバスは、拡張スプリングブートアプリケーションと同様であるが、アプリケーション間の通信チャネルとして使用することができることです。
- 春の雲バス公式解説
如果只有一个 client 端的话,那我们用 webhook ,设置手动刷新都不算太费事,但是如果端比较多的话呢,一个一个去手动刷新未免有点复杂。这样的话,我们可以借助 Spring Cloud Bus 的广播功能,让 client 端都订阅配置更新事件,当配置更新时,触发其中一个端的更新事件,Spring Cloud Bus 就把此事件广播到其他订阅端,以此来达到批量更新。
1、Spring Cloud Bus 核心原理其实就是利用消息队列做广播,所以要先有个消息队列,目前官方支持 RabbitMQ 和 kafka。
这里用的是 RabbitMQ, 所以先要搭一套 RabbitMQ 环境。请自行准备环境,这里不再赘述。我是用 docker 直接创建的,然后安装了 rabbitmq-management 插件,这样就可以在浏览器访问 15672 查看 UI 管理界面了。
2、在 client 端增加相关的包,注意,只在 client 端引入就可以。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
3、在配置文件中增加 RabbitMQ 相关配置,默认的端口应该是 5672 ,因为我是用 docker 创建的,所以有所不同。
spring:
rabbitmq:
host: localhost
port: 32775
username: guest
password: guest
4、启动两个或多个 client 端,准备来做个测试
在启动的时候分别加上 vm option:-Dserver.port=3302 和 -Dserver.port=3303 ,然后分别启动就可以了。
5、分别打开 http://localhost:3302/autoShow 和 http://localhost:3303/autoShow,查看内容,然后修改 github 上配置文件的内容并提交。再次访问这两个地址,数据没有变化。
6、访问其中一个的 actuator/bus-refresh 地址,注意还是要用 POST 方式访问。之后查看控制台输出,会看到这两个端都有一条这样的日志输出
o.s.cloud.bus.event.RefreshListener: Received remote refresh request. Keys refreshed
7、再次访问第 5 步的两个地址,会看到内容都已经更新为修改后的数据了。
综上所述,当我们修改配置后,使用 webhook ,或者手动触发的方式 POST 请求一个 client 端的 actuator/bus-refresh 接口,就可以更新给所有端了。
结合 Eureka 使用 Spring Cloud Config
以上讲了 Spring Cloud Config 最基础的用法,但是如果我们的系统中使用了 Eureka 作为服务注册发现中心,那么 Spring Cloud Config 也应该注册到 Eureka 之上,方便其他服务消费者使用,并且可以注册多个配置中心服务端,以实现高可用。
好的,接下来就来集成 Spring Cloud Config 到 Eureka 上。
在 github 仓库中增加配置文件
启动 Eureka Server
首先启动一个 Eureka Server,之前的文章有讲过 Eureka ,可以回过头去看看。Spring Cloud Eureka 实现服务注册发现,为了清楚,这里还是把配置列出来
1、pom 中引入相关包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、设置配置文件内容
bootstrap.yml
spring:
application:
name: kite-eureka-center
security:
user:
name: test # 用户名
password: 123456 # 密码
cloud:
inetutils: ## 网卡设置
ignoredInterfaces: ## 忽略的网卡
- docker0
- veth.*
- VM.*
preferredNetworks: ## 优先的网段
- 192.168
application.yml
server:
port: 3000
eureka:
instance:
hostname: eureka-center
appname: 注册中心
client:
registerWithEureka: false # 单点的时候设置为 false 禁止注册自身
fetchRegistry: false
serviceUrl:
defaultZone: http://test:123456@localhost:3000/eureka
server:
enableSelfPreservation: false
evictionIntervalTimerInMs: 4000
3、Application 启动类
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、启动服务,在浏览器访问 3000 端口,并输出用户名 test,密码 123456 即可进入 Eureka UI
配置 Spring Cloud Config 服务端
服务端和前面的相比也就是多了注册到 Eureka 的配置,其他地方都是一样的。
1、在 pom 中引入相关的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring cloud config 服务端包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- eureka client 端包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、配置文件做配置
application.yml
server:
port: 3012
eureka:
client:
serviceUrl:
register-with-eureka: true
fetch-registry: true
defaultZone: http://test:123456@localhost:3000/eureka/
instance:
preferIpAddress: true
spring:
application:
name: config-eureka-server
cloud:
config:
server:
git:
uri: https://github.com/huzhicheng/config-only-a-demo
username: github 用户名
password: github 密码
default-label: master
search-paths: config
相比于不加 Eureka 的版本,这里仅仅是增加了 Eureka 的配置,将配置中心注册到 Eureka ,作为服务提供者对外提供服务。
3、启动类,在 @EnableConfigServer 的基础上增加了 @EnableEurekaClient,另外也可以用 @EnableDiscoveryClient 代替 @EnableEurekaClient
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、启动服务,之后访问 Eureka ,可以看到服务已注册成功
配置 Spring Cloud Config 客户端
客户端的配置相对来说变动大一点,加入了 Eureka 之后,就不用再直接和配置中心服务端打交道了,要通过 Eureka 来访问。另外,还是要注意客户端的 application 名称要和 github 中配置文件的名称一致。
1、pom 中引入相关的包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、配置文件
bootstrap.yml
eureka:
client:
serviceUrl:
register-with-eureka: true
fetch-registry: true
defaultZone: http://test:123456@localhost:3000/eureka/
instance:
preferIpAddress: true
spring:
profiles:
active: dev
---
spring:
profiles: prod
application:
name: config-eureka-client
cloud:
config:
label: master
profile: prod
discovery:
enabled: true
service-id: config-eureka-server
---
spring:
profiles: dev
application:
name: config-eureka-client
cloud:
config:
label: master #指定仓库分支
profile: dev #指定版本 本例中建立了dev 和 prod两个版本
discovery:
enabled: true # 开启
service-id: config-eureka-server # 指定配置中心服务端的server-id
除了注册到 Eureka 的配置外,就是配置和配置中心服务端建立关系。
其中 service-id 也就是服务端的application name。
application.yml
server:
port: 3011
management:
endpoint:
shutdown:
enabled: false
endpoints:
web:
exposure:
include: "*"
data:
env: NaN
user:
username: NaN
password: NaN
3、启动类,增加了 @EnableEurekaClient 注解,可以用 @EnableDiscoveryClient 代替
@SpringBootApplication
@EnableEurekaClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、另外的配置实体类和 RESTController 和上面的一样,没有任何更改,直接参考即可。
5、启动 client 端,访问 http://localhost:3011/autoShow,即可看到配置文件内容。
这个例子只是介绍了和 Eureka 结合的最基础的情况,还可以注册到高可用的 Eureka 注册中心,另外,配置中心服务端还可以注册多个实例,同时保证注册中心的高可用。
注意事项
1. 在 git 上的配置文件的名字要和 config 的 client 端的 application name 对应;
2. 在结合 eureka 的场景中,关于 eureka 和 git config 相关的配置要放在 bootstrap.yml 中,否则会请求默认的 config server 配置,这是因为当你加了配置中心,服务就要先去配置中心获取配置,而这个时候,application.yml 配置文件还没有开始加载,而 bootstrap.yml 是最先加载的。
如果你觉得写的还可以的话,请点个「推荐」吧
欢迎关注,不定期更新本系列和其他文章
古时的风筝
,进入公众号可以加入交流群