1. 程式人生 > 其它 >WinForm 開啟指定網頁,類似瀏覽器

WinForm 開啟指定網頁,類似瀏覽器

寫在前面

​ 在我們的實際開發過程中,或多或少的應用到配置項,在分散式系統中,配置項更是重要的組成部分,在編輯配置過程中,出現了不方便維護、配置內容的安全與許可權,更新配置項需要重啟應用等諸多問題,這時候統一配置中心就出現了。

​ 在Spring Cloud中,分散式配置中心元件Spring Cloud Config就是用做統一配置中心的。它支援配置檔案放在在配置服務的記憶體中,也支援放在遠端Git倉庫裡。引入Spring Cloud Config後,我們的外部配置檔案就可以集中放置在一個git倉庫裡,再新建一個config server,用來管理所有的配置檔案,維護的時候需要更改配置時,只需要在本地更改後,推送到遠端倉庫,所有的服務例項都可以通過config server來獲取配置檔案,這時每個服務例項就相當於配置服務的客戶端config client,為了保證系統的穩定,配置服務端config server可以進行叢集部署,即使某一個例項,因為某種原因不能提供服務,也還有其他的例項保證服務的繼續進行。

Config Server

使用方式

pom.xml檔案中引入config-server依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>

啟動類加入@EnableConfigServer註解

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigApplication {

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

application.yml配置檔案中配置遠端git地址

spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://gitlab-demo.com/SpringCloud_Sell/config-repo.git
username: ********
password: ********

資原始檔與URL地址對映

Spring Cloud會將配置對映為"/{application}/{profile}"

URL地址和資原始檔對映如下:

  • /{application}/{profile}[/{label}]

  • /{application}-{profile}.yml

  • /{label}/{application}-{profile}.yml

  • /{application}-{profile}.properties

  • /{label}/{application}-{profile}.properties

  1. 第一個規則的分支名是可以省略的,預設是master分支

  2. 無論你的配置檔案是properties,還是yml,只要是應用名+環境名能匹配到這個配置檔案,那麼就能取到

  3. 如果是想直接定位到沒有寫環境名的預設配置,那麼就可以使用default去匹配沒有環境名的配置檔案

  4. 使用第一個規則會匹配到預設配置

  5. 如果直接使用應用名來匹配,會出現404錯誤,此時可以加上分支名匹配到預設配置檔案

  6. 如果配置檔案的命名很由多個-分隔,此時直接使用這個檔名去匹配的話,會出現直接將內容以源配置檔案內容直接返回,內容前可能會有預設配置檔案的內容

  7. 如果檔名含有多個“-”,則以最後一個“-”分割{application}和{profile},若檔名為:my-app-demo-dev.properties,則對映的url為"/my-app-demo/dev"

  8. 示例:資原始檔為myapp-dev.properties,對應url為:http://xxx/myapp/dev

客戶端配置:

spring.application.name=xxxx

spring.cloud.config.profile=dev

spring.cloud.config.label=test

上述配置與資原始檔對應關係為:

spring.application.name 對應 {application}

spring.cloud.config.profile 對應 {profile}

spring.cloud.config.label 對應 {label}

Config Client

使用方式

pom.xml檔案中引入config-server依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>

新增 bootstrap.yml 應用配置檔案,讓spring boot啟動時先載入bootstrap.yml去獲取配置資訊

spring:
application:
name: order
cloud:
config:
discovery:
enabled: true
service-id: CONFIG
profile: test
label: master #當 ConfigServer 的後端儲存的是 Git 的時候,預設就是 master

注意:git上的配置檔案中,order為公用的配置,每次都會載入,其他為區分不同環境的配置資訊。

自動更新配置

​ 以上只能支援配置的基本使用,修改了git上的配置檔案,還是必須要重啟應用才能生效,沒有達到統一配置中心的要求,那麼如何才能自動更新配置呢?

Spring Cloud Bus

看到上圖是config的架構圖,config-server會去遠端的git拉取配置,拉取到配置後,會在本地儲存一份,同時提供對外的配置服務,order,product等服務在啟動的時候訪問config-server讀取配置,如果啟動後再次修改git中的配置,order,product等服務的配置是不變的,原因是根本沒有通知order,product等服務配置修改的訊息。這時候就應用到了訊息佇列(rabbitMQ、kafka等),操作資料庫就會應用到Spring Cloud Bus這個元件。config-server與config-client間就是通過訊息佇列進行通訊,config-server使用了Spring Cloud Bus以後,會對外提供一個介面/bus-refresh,訪問這個介面,就會把更新配置的資訊傳送到MQ中去。所以,只要在遠端的git上配置好這樣的地址就可以達到自動訪問,自動重新整理配置了。

注:git自動訪問連結用到web-hooks功能

使用方式

config-server與config-client的pom.xml檔案中加入依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

修改config-server配置檔案,將/bus-refresh介面暴露出去

management:
endpoints:
web:
exposure:
include: "*"

在web-hooks上配置自動訪問連結,這裡不用配置成bus-refresh,config針對webhooks提供了一個路由monitor

啟動應用config-server與config-client後,會分別自動建立一個訊息佇列,當修改git上的配置後,webhooks自動訪問了重新整理配置的連結,這時候,佇列中就會存在一個訊息。