6.8使用Consul和envconsul來配置外部環境變數
因為我們不想我們的應用去知道任何關於Consul,但是不得不明確連線到Consul。我們可以應用其它的工具去建立和開啟資源通過Hashicorp,稱易 envconsul連線到Consul的服務,使用額外的特殊配置key/value樹,並且暴露它作為環境變數去開啟我們的應用。
為了使用envconsul,我們需要下載包,可以從這個地方下載:https://github.com/hashicorp/envconsul/releases
6.8.1如何使用
- 如果你沒有新增值給my/config/value的key到Consul,讓我們執行這個命令新增:
curl -X PUT -d 'From Consul Config' http://localhost:8500/v1/kv/bookpub/my/config/value
- 第一步就是確保envconsul可以連線到Consul服務,和它提取正確的資料在我們的配置key中。讓我們執行簡單的測試命令:envconsul --once --sanitize --upcase --prefix bookpub env 你將會看到:
…T |
- 確保envconsul返回了正確的資料給我們,我們可以使用它去開啟BookPub應用,執行命令是:envconsul --once --sanitize --upcase --prefix bookpub ./gradlew clean bootRun 我們會看到如下輸出資訊:
2015-05-31 --- ication$$EnhancerBySpringCGLIB$$b123df6a : Value of my.config.value property is: From Consul Config |
- 我們可以通過執行/gradlew clean bootRepackag這個命令來建立可執行的包,執行envconsul --once --sanitize --upcase --prefix bookpub ./build/libs/bookpub-0.0.1-SNAPSHOTexec.jar這個命令來開啟我們的應用。我們可以看到與前面相似的結果。如果你看到Gradle而不是From Consul Config,你要確保applicationDefaultJvmArgs的配置在build.gradle不是Dmy.config.value=Gradle.
- 另外一個好的地方是,enconsul不僅僅可 暴露配置的值作為環境變數,也可以監控任何的改變或重啟在Consul應用中的改變。執行這一行命令envconsul --sanitize --upcase --prefix bookpub ./build/libs/bookpub-0.0.1-SNAPSHOT-exec.jar 你會看到如下輸出:
2015-05-31 --- ication$$EnhancerBySpringCGLIB$$b123df6a : Value of |
- 現在我們使用curl命令去獲取ModifyIndex的值,和更新它的值為From UpdateConsul Config。執行命令:curl
http://localhost:8500/v1/kv/bookpub/my/config/value, grabbing the
ModifyIndex value, and using it to execute curl -X PUT -d 'From UpdatedConsul
Config' http://localhost:8500/v1/kv/bookpub/my/config/value?cas=
<ModifyIndex Value> 你要看到應用的重啟,並且看到如下的輸出:
2015-05-31 --- ication$$EnhancerBySpringCGLIB$$b123df6a : Value of
my.config.value property is: From UpdatedConsul Config
6.8.2使用原理
我們最先執行這個命令:envconsul --once --sanitize --upcase --prefix bookpub ./gradlew clean bootRun 我們來看一下這個命令是如何起作用。
- 首先,你可能意識到沒有明確的說明哪個Consul節點我們需要連線上。這是因為這個暗示或認為你已經有一個Consul代理執行在本地localhost:8500.你也可以通過—consul localhost:8500的命令來新增到命令列中作為指定Consul的例項。
- --prefix指定特殊的開啟配置key的分隔為不同的值。當我們新增key到Consul中時,我們可以使用這個key: bookpub/my/config/value 通過使用 –prefix bookpub,我們告訴envconsul去刪除bookpub作為key的部分,並且使用所有內部樹的元素在bookpub去建立環境變數。這個的話,my/config/value成為了環境變數
- --sanitize告訴envconsul去取代所有無效的帶的下劃線的特徵。所以,如果我們使用—sanitize,我們最終會以my_config_value作為環境變數。
- --upcase是保證所有環境變數都是大寫的,當它於—sanitize結合使用時,我們的環境變數my/config/value會變為MY_CONFIG_VALUE.
- --once說明我們僅僅想要外部的kye作為環境變數,不想繼續監控在Consul中的改變,如果我們的先前的tree發生改變時,重新的外部變數將作為環境變數並且重啟應用(注:如果你想監控Consul的改變,你可以移除掉--once)
envconsul的監控是非常有用,想一下,你的資料庫連線配置如果改變的話,envconsul將會監聽到並且重啟應用,然後連線到新的連線地址中。
當前這個應用是傳送傳統的SIGTERM訊號到應用中,告訴應用去結束應用並且重啟。有時候,我們並不想要這樣的功能,因為有些應用的啟動要花費大量時間。為了更好的處理這種情況,envcosul提供了一些標準的資訊配置。你可以新增 –kill -signal命令。指定這些資訊取代SIGTERN:SIGHUP,SIGTERM,SIGINT,SIGQUIT,SIGUSR1或SIGUSR2.
相關文章
- 配置環境變數變數
- Flume 配置環境變數變數
- 配置JDK環境變數JDK變數
- windows配置環境變數Windows變數
- Linux環境變數配置Linux變數
- Shell配置環境變數變數
- Nuxt.js 環境變數配置與使用UXJS變數
- Rust 使用 dotenv 來設定環境變數Rust變數
- Linux配置環境變數$PATHLinux變數
- java 環境變數的配置Java變數
- linux java環境變數配置LinuxJava變數
- linux工具配置環境變數Linux變數
- [Oracle] -- 配置Oracle環境變數Oracle變數
- 常用的DOS命令和配置JDK環境變數JDK變數
- 配置jdk環境變數win10教程_win10jdk環境變數如何配置JDK變數Win10
- vue-cli配置環境變數Vue變數
- jdk安裝,環境變數配置JDK變數
- mac配置全域性環境變數Mac變數
- nuxt3_配置環境變數UX變數
- Nuxt3環境變數配置UX變數
- JDK各版本環境變數配置JDK變數
- JDK13環境變數配置JDK變數
- mac如何配置python環境變數MacPython變數
- FastAPI(64)- Settings and Environment Variables 配置項和環境變數ASTAPI變數
- win10怎麼配置環境變數_win10的環境變數配置在哪裡Win10變數
- win10怎麼配置jdk環境變數_window10jdk環境變數配置步驟Win10JDK變數
- java配置環境變數的錯誤Java變數
- Linux下Java環境變數的配置LinuxJava變數
- Linux 環境變數配置全攻略Linux變數
- win10如何配置環境變數?Win10變數
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- OpenMP 環境變數使用總結變數
- 環境變數和地址空間變數
- JS變數和執行環境JS變數
- 使用 setenv 配置檔案管理 Tomcat 的自定義環境變數Tomcat變數
- Hyperledger Fabric 通道配置檔案和容器環境變數詳解變數
- Tomcat的下載及環境變數配置Tomcat變數
- vue3--vite環境變數的配置VueVite變數