<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      我們放棄了 Nacos 作為配置中心,轉(zhuǎn)而選擇了這款神器~

      0
      分享至

      釣友寶 (微信小程序):一款專門為 釣友 開發(fā)的 免費的 分享釣點地圖與實時天氣的軟件,地圖中標(biāo)記了所有野釣、釣場、公共水域等的精確位置,支持導(dǎo)航、 預(yù)測釣魚位置的魚情 等功能。
      1. 基礎(chǔ)概念

      由于Apollo 概念比較多,剛開始使用比較復(fù)雜,最好先過一遍概念再動手實踐嘗試使用。

      1.1、背景

      隨著程序功能的日益復(fù)雜,程序的配置日益增多,各種功能的開關(guān)、參數(shù)的配置、服務(wù)器的地址……對程序配置的期望值也越來越高,配置修改后實時生效,灰度發(fā)布,分環(huán)境、分集群管理配置,完善的權(quán)限、審核機制…… 在這樣的大環(huán)境下,傳統(tǒng)的通過配置文件、數(shù)據(jù)庫等方式已經(jīng)越來越無法滿足開發(fā)人員對配置管理的需求。因此 Apollo 配置中心應(yīng)運而生!

      1.2、簡介

      Apollo(阿波羅)是攜程框架部門研發(fā)的開源配置管理中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性。

      1.3、特點

      • 部署簡單

      • 灰度發(fā)布

      • 版本發(fā)布管理

      • 提供開放平臺API

      • 客戶端配置信息監(jiān)控

      • 提供Java和.Net原生客戶端

      • 配置修改實時生效(熱發(fā)布)

      • 權(quán)限管理、發(fā)布審核、操作審計

      • 統(tǒng)一管理不同環(huán)境、不同集群的配置

      1.4、基礎(chǔ)模型如下即是 Apollo 的基礎(chǔ)模型:
      • (1)、用戶在配置中心對配置進(jìn)行修改并發(fā)布

      • (2)、配置中心通知Apollo客戶端有配置更新

      • (3)、Apollo客戶端從配置中心拉取最新的配置、更新本地配置并通知到應(yīng)用


      1.5、Apollo 的四個維度Apollo支持4個維度管理Key-Value格式的配置:

      • application (應(yīng)用)

      • environment (環(huán)境)

      • cluster (集群)

      • namespace (命名空間)

      (1)、application

      • Apollo 客戶端在運行時需要知道當(dāng)前應(yīng)用是誰,從而可以根據(jù)不同的應(yīng)用來獲取對應(yīng)應(yīng)用的配置。

      • 每個應(yīng)用都需要有唯一的身份標(biāo)識,可以在代碼中配置 app.id 參數(shù)來標(biāo)識當(dāng)前應(yīng)用,Apollo 會根據(jù)此指來辨別當(dāng)前應(yīng)用。

      (2)、environment

      在實際開發(fā)中,我們的應(yīng)用經(jīng)常要部署在不同的環(huán)境中,一般情況下分為開發(fā)、測試、生產(chǎn)等等不同環(huán)境,不同環(huán)境中的配置也是不同的,在 Apollo 中默認(rèn)提供了四種環(huán)境:

      • FAT(Feature Acceptance Test):功能測試環(huán)境

      • UAT(User Acceptance Test):集成測試環(huán)境

      • DEV(Develop):開發(fā)環(huán)境

      • PRO(Produce):生產(chǎn)環(huán)境

      在程序中如果想指定使用哪個環(huán)境,可以配置變量env的值為對應(yīng)環(huán)境名稱即可。

      推薦劃水摸魚神器:

      https://www.yoodb.com/slack-off/home.html

      (3)、cluster

      • 一個應(yīng)用下不同實例的分組,比如典型的可以按照數(shù)據(jù)中心分,把上海機房的應(yīng)用實例分為一個集群,把北京機房的應(yīng)用實例分為另一個集群。

      • 對不同的集群,同一個配置可以有不一樣的值,比如說上面所指的兩個北京、上海兩個機房設(shè)置兩個集群,兩個集群中都有 mysql 配置參數(shù),其中參數(shù)中配置的地址是不一樣的。

      (4)、namespace

      一個應(yīng)用中不同配置的分組,可以簡單地把 namespace 類比為不同的配置文件,不同類型的配置存放在不同的文件中,如數(shù)據(jù)庫配置文件,RPC 配置文件,應(yīng)用自身的配置文件等。

      熟悉SpringBoot 的都知道,SpringBoot 項目都有一個默認(rèn)配置文件application.yml,如果還想用多個配置,可以創(chuàng)建多個配置文件來存放不同的配置信息,通過指定spring.profiles.active參數(shù)指定應(yīng)用不同的配置文件。這里的namespace概念與其類似,將不同的配置放到不同的配置namespace中。

      Namespace 分為兩種權(quán)限,分別為:

      • public(公共的):public權(quán)限的 Namespace,能被任何應(yīng)用獲取。

      • private(私有的):只能被所屬的應(yīng)用獲取到。一個應(yīng)用嘗試獲取其它應(yīng)用 private 的 Namespace,Apollo 會報 "404" 異常。

      Namespace 分為三種類型,分別為:

      • 私有類型:私有類型的 Namespace 具有 private 權(quán)限。例如 application Namespace 為私有類型。

      • 公共類型:公共類型的 Namespace 具有 public 權(quán)限。公共類型的N amespace 相當(dāng)于游離于應(yīng)用之外的配置,且通過 Namespace 的名稱去標(biāo)識公共 Namespace,所以公共的 Namespace 的名稱必須全局唯一。

      • 關(guān)聯(lián)類型(繼承類型):關(guān)聯(lián)類型又可稱為繼承類型,關(guān)聯(lián)類型具有 private 權(quán)限。關(guān)聯(lián)類型的 Namespace 繼承于公共類型的 Namespace,將里面的配置全部繼承,并且可以用于覆蓋公共 Namespace 的某些配置。

      1.6、本地緩存Apollo客戶端會把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份,用于在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時候,依然能從本地恢復(fù)配置,不影響應(yīng)用正常運行。 本地緩存路徑默認(rèn)位于以下路徑,所以請確保/opt/data或C:\opt\data\目錄存在,且應(yīng)用有讀寫權(quán)限。
      • Mac/Linux:/opt/data/{appId}/config-cache

      • Windows:C:\opt\data{appId}\config-cache

      本地配置文件會以下面的文件名格式放置于本地緩存路徑下:

      {appId}+{cluster}+{namespace}.properties
      1.7、客戶端設(shè)計


      上圖簡要描述了Apollo客戶端的實現(xiàn)原理

      • 客戶端和服務(wù)端保持了一個長連接,從而能第一時間獲得配置更新的推送。

      • 客戶端還會定時從 Apollo 配置中心服務(wù)端拉取應(yīng)用的最新配置。

      • 這是一個 fallback 機制,為了防止推送機制失效導(dǎo)致配置不更新

      客戶端定時拉取會上報本地版本,所以一般情況下,對于定時拉取的操作,服務(wù)端都會返回 304 - Not Modified

      定時頻率默認(rèn)為每 5 分鐘拉取一次,客戶端也可以通過在運行時指定apollo.refreshInterval來覆蓋,單位為分鐘。

      • 客戶端從 Apollo 配置中心服務(wù)端獲取到應(yīng)用的最新配置后,會保存在內(nèi)存中。

      • 客戶端會把從服務(wù)端獲取到的配置在本地文件系統(tǒng)緩存一份 在遇到服務(wù)不可用,或網(wǎng)絡(luò)不通的時候,依然能從本地恢復(fù)配置。

      • 應(yīng)用程序從 Apollo 客戶端獲取最新的配置、訂閱配置更新通知。

      配置更新推送實現(xiàn)

      前面提到了 Apollo 客戶端和服務(wù)端保持了一個長連接,從而能第一時間獲得配置更新的推送。長連接實際上我們是通過 Http Long Polling 實現(xiàn)的,具體而言:

      • 客戶端發(fā)起一個 Http 請求到服務(wù)端

      • 服務(wù)端會保持住這個連接 60 秒

      • 如果在 60 秒內(nèi)有客戶端關(guān)心的配置變化,被保持住的客戶端請求會立即返回,并告知客戶端有配置變化的 namespace 信息,客戶端會據(jù)此拉取對應(yīng) namespace 的最新配置

      如果在 60 秒內(nèi)沒有客戶端關(guān)心的配置變化,那么會返回 Http 狀態(tài)碼 304 給客戶端

      • 客戶端在收到服務(wù)端請求后會立即重新發(fā)起連接,回到第一步

      • 考慮到會有數(shù)萬客戶端向服務(wù)端發(fā)起長連,在服務(wù)端我們使用了 async servlet(Spring DeferredResult) 來服務(wù) Http Long Polling 請求。

      1.8、總體設(shè)計


      上圖簡要描述了Apollo的總體設(shè)計,我們可以從下往上看:

      • Config Service 提供配置的讀取、推送等功能,服務(wù)對象是 Apollo 客戶端

      • Admin Service 提供配置的修改、發(fā)布等功能,服務(wù)對象是 Apollo Portal(管理界面)

      • Config Service 和 Admin Service 都是多實例、無狀態(tài)部署,所以需要將自己注冊到 Eureka 中并保持心跳

      • 在 Eureka 之上我們架了一層 Meta Server 用于封裝Eureka的服務(wù)發(fā)現(xiàn)接口

      • Client 通過域名訪問 Meta Server 獲取Config Service服務(wù)列表(IP+Port),而后直接通過 IP+Port 訪問服務(wù),同時在 Client 側(cè)會做 load balance 錯誤重試

      • Portal 通過域名訪問 Meta Server 獲取 Admin Service 服務(wù)列表(IP+Port),而后直接通過 IP+Port 訪問服務(wù),同時在 Portal 側(cè)會做 load balance、錯誤重試

      • 為了簡化部署,我們實際上會把 Config Service、Eureka 和 Meta Server 三個邏輯角色部署在同一個 JVM 進(jìn)程中

      1.9、可用性考慮配置中心作為基礎(chǔ)服務(wù),可用性要求非常高,下面的表格描述了不同場景下Apollo的可用性: 場景 影響 降級 原因 某臺 config service 下線 無影響

      Config service無狀態(tài),客戶端重連其它config service 所有 config service 下線 客戶端無法讀取最新配置,Portal無影響 客戶端重啟時,可以讀取本地緩存配置文件

      某臺 admin service 下線 無影響

      Admin service無狀態(tài),Portal重連其它 admin service 所有 admin service 下線 客戶端無影響,portal無法更新配置

      某臺 portal 下線 無影響

      Portal域名通過slb綁定多臺服務(wù)器,重試后指向可用的服務(wù)器 全部 portal 下線 客戶端無影響,portal無法更新配置

      某個數(shù)據(jù)中心下線 無影響

      多數(shù)據(jù)中心部署,數(shù)據(jù)完全同步,Meta Server/Portal 域名通過 slb 自動切換到其它存活的數(shù)據(jù)中心 2. Apollo創(chuàng)建與配置 接下來我們將創(chuàng)建一個 Apollo 的客戶端項目,引用 Apollo 來實現(xiàn)配置動態(tài)更新,不過在此之前我們需要提前進(jìn)入 Apollo Portal 界面,在里面提前創(chuàng)建一個項目并在其配置一個參數(shù),方便后續(xù)客戶端引入該配置參數(shù),測試是否能動態(tài)變化。2.1、登錄 Apollo我這里是部署到 Kubernetes 中,通過 NodePort 方式暴露出一個端口,打開這個地址登錄 Apollo:

      • 用戶名:apollo

      • 密 碼:admin


      2.2、修改與增加部門數(shù)據(jù)在登錄后創(chuàng)建項目時,選擇部門默認(rèn)只能選擇 Apollo 自帶的 測試部門1與測試部門2兩個選項。


      開始這真讓人迷糊,原來 Apoloo 沒有修改或新增部門信息的管理節(jié)目,只能通過修改數(shù)據(jù)庫,來新增或者修改數(shù)據(jù),這里打開Portal對月的數(shù)據(jù)庫中的表ApolloPortalDB修改keyorganizationsvalue的 json 數(shù)據(jù),改成自己對于的部門信息。


      2.3、創(chuàng)建一個項目修改完數(shù)據(jù)庫部門信息后,重新登錄 Apollo Portal,然后創(chuàng)建項目,這時候選擇部門可以看到已經(jīng)變成我們自己修改后的部門信息了,選擇我們自定義部門,然后設(shè)置應(yīng)用 ID 為 apollo-test,應(yīng)用名為 apollo-demo 。


      創(chuàng)建完成后進(jìn)入配置管理界面


      2.4、創(chuàng)建一個配置參數(shù)創(chuàng)建一個配置參數(shù),方便后續(xù) Apollo 客戶端項目引入該參數(shù),進(jìn)行動態(tài)配置測試。


      設(shè)置key 為testvalue 為123456然后設(shè)置一個備注,保存。


      創(chuàng)建完成后可以看到配置管理節(jié)目新增了一條配置。


      接下來我們將此配置通過發(fā)布按鈕,進(jìn)行發(fā)布。


      3. 創(chuàng)建Apollo客戶端 這里創(chuàng)建一個 SpringBoot 項目,引入 Apollo 客戶端來來實現(xiàn)與 Apollo 配置中心服務(wù)端交互。3.1、Mavne 添加 Apollo 依賴

      
           
      
       4.0.0 modelVersion>     
      
               
      
       org.springframework.boot groupId>         
      
       spring-boot-starter-parent artifactId>         
      
       2.1.8.RELEASE version>      parent>     
      
       club.mydlq groupId>     
      
       apollo-demo artifactId>     
      
       0.0.1 version>     
      
       apollo-demo name>     
      
       Apollo Demo description>     
      
               
      
       1.8 java.version>      properties>     
      
               
      
                   
      
       org.springframework.boot groupId>             
      
       spring-boot-starter-web artifactId>          dependency>         
      
                   
      
       com.ctrip.framework.apollo groupId>             
      
       apollo-client artifactId>             
      
       1.4.0 version>          dependency>      dependencies>     
      
               
      
                   
      
                       
      
       org.springframework.boot groupId>                 
      
       spring-boot-maven-plugin artifactId>              plugin>          plugins>      build> project>
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      3.2、配置文件添加參數(shù)在 application.yml 配置文件中添加下面參數(shù),這里簡單介紹下 Apollo 參數(shù)作用:
      • apollo.meta:Apollo 配置中心地址。

      • apollo.cluster:指定使用某個集群下的配置。

      • apollo.bootstrap.enabled:是否開啟 Apollo。

      • apollo.bootstrap.namespaces :指定使用哪個 Namespace 的配置,默認(rèn) application。

      • apollo.cacheDir=/opt/data/some-cache-dir:為了防止配置中心無法連接等問題,Apollo 會自動將配置本地緩存一份。

      • apollo.autoUpdateInjectedSpringProperties:Spring應(yīng)用通常會使用 Placeholder 來注入配置,如${someKey:someDefaultValue},冒號前面的是 key,冒號后面的是默認(rèn)值。如果想關(guān)閉 placeholder 在運行時自動更新功能,可以設(shè)置為 false。

      • apollo.bootstrap.eagerLoad.enabled :將 Apollo 加載提到初始化日志系統(tǒng)之前,如果設(shè)置為 false,那么將打印出 Apollo 的日志信息,但是由于打印 Apollo 日志信息需要日志先啟動,啟動后無法對日志配置進(jìn)行修改,所以 Apollo 不能管理應(yīng)用的日志配置,如果設(shè)置為 true,那么 Apollo 可以管理日志的配置,但是不能打印出 Apollo 的日志信息。

      #應(yīng)用配置 server:   port: 8080 spring:   application:     name: apollo-demo #Apollo 配置 app:   id: apollo-test                            #應(yīng)用ID apollo:   cacheDir: /opt/data/                       #配置本地配置緩存目錄   cluster: default                           #指定使用哪個集群的配置   meta: http://192.168.2.11:30002            #DEV環(huán)境配置中心地址   autoUpdateInjectedSpringProperties: true   #是否開啟 Spring 參數(shù)自動更新   bootstrap:                                     enabled: true                            #是否開啟 Apollo     namespaces: application                  #設(shè)置 Namespace     eagerLoad:       enabled: false                         #將 Apollo 加載提到初始化日志系統(tǒng)之前
      3.3、創(chuàng)建測試 Controller 類寫一個 Controller 類來輸出 test 變量的值,使用了 Spring 的 @Value 注解,用于讀取配置文件中的變量的值,這里來測試該值,項目啟動后讀取到的變量的值是設(shè)置在 application 配置文件中的默認(rèn)值,還是遠(yuǎn)程 Apollo 中的值,如果是 Apollo 中配置的值,那么再測試在 Apollo 配置中心中改變該變量的值后,這里是否會產(chǎn)生變化。

      推薦劃水摸魚神器:

      https://www.yoodb.com/slack-off/home.html

      @RestController public class TestController {     @Value("${test:默認(rèn)值}")     private String test;     @GetMapping("/test")     public String test(){         return "test的值為:" + test;     } }
      3.4、創(chuàng)建啟動類SpringBoot 項目啟動類。

      @SpringBootApplication public class Application {     public static void main(String[] args) {         SpringApplication.run(Application.class, args);     } }
      3.5、JVM 啟動參數(shù)添加啟動參數(shù)由于本人的 Apollo 是部署在 Kubernetes 環(huán)境中的,JVM 參數(shù)中必須添加兩個變量:
      • env:應(yīng)用使用 Apollo 哪個環(huán)境,例如設(shè)置為 DEV 就是指定使用開發(fā)環(huán)境,如果設(shè)置為 PRO 就是制定使用生產(chǎn)環(huán)境。

      • apollo.configService:指定配置中心的地址,跳過 meta 的配置,在測試時指定 meta 地址無效果。如果 Apollo 是部署在 Kubernetes 中,則必須設(shè)置該參數(shù)為配置中心地址,如果 Apollo 不是在 Kubernetes 環(huán)境中,可以不設(shè)置此參數(shù),只設(shè)置 meta 參數(shù)即可。一般情況下,configService 和 meta 值一致。

      如果是在 Idea 中啟動,可以配置啟動參數(shù),加上:

      -Dapollo.configService=http://192.168.2.11:30002 -Denv=DEV


      如果是java 命令啟動程序,需要 JVM 加上:

      $ java -Dapollo.configService=http://192.168.2.11:30002 -Denv=DEV -jar apollo-demo.jar

      注意:上面 env 指定的環(huán)境,要和 apollo.meta 指定 Config 地址的環(huán)境一致,例如 -Denv=DEV 即使用開發(fā)環(huán)境,那么 apollo.meta=http://xxx.xxx.xxx:8080 這個url 的 Config 也是開發(fā)環(huán)境下的配置中心服務(wù),而不能是 PRO 或者其它環(huán)境下的配置中心。


      4. 啟動項目進(jìn)行測試4.1、測試是否能夠獲取 Apollo 中設(shè)置的值

      啟動上面的測試用例,然后輸入地址 http://localhost:8080/test 查看:

      test的值為:123456

      可以看到使用的是 Apollo 中配置的test參數(shù)的值123456,而不是默認(rèn)的值。

      4.2、測試當(dāng) Apollo 中修改參數(shù)值后客戶端是否能及時刷新

      修改Apollo 配置中心參數(shù)test值為666666,然后再次發(fā)布。


      發(fā)布完成后再次輸入地址 http://localhost:8080/test 查看:

      test的值為:666666

      可以看到示例應(yīng)用中的值已經(jīng)改變?yōu)樽钚碌闹怠?/p>

      4.3、測試當(dāng) Apollo 執(zhí)行配置回滾操作時客戶端是否能及時改變


      回滾完成后狀態(tài)將變?yōu)槲窗l(fā)布狀態(tài),則時候輸入地址 http://localhost:8080/test 查看:

      test的值為:123456

      可以看到已經(jīng)回滾到之前的test配置的值了。

      4.4、測試當(dāng)不能訪問 Apollo 時客戶端的變化

      這里我們將 JVM 參數(shù)中 Apollo 配置中心地址故意改錯:

      -Dapollo.configService=http://192.168.2.100:30002 -Denv=DEV

      然后輸入地址 http://localhost:8080/test 可以看到值為:

      test的值為:123456

      可以看到顯示的值并不是我們定義的默認(rèn)值,而還是 Apollo 配置中心配置的test參數(shù)的值。考慮到由于 Apollo 會在本地將配置緩存一份,出現(xiàn)上面原因,估計是緩存生效。當(dāng)客戶端不能連接到 Apollo 配置中心時候,默認(rèn)使用本地緩存文件中的配置。

      上面我們配置了本地緩存配置文件存放地址為 "/opt/data/" ,接下來進(jìn)入緩存目錄,找到對應(yīng)的緩存配置文件,刪除緩存配置文件后,重啟應(yīng)用,再次輸入地址查看:

      test的值為:默認(rèn)值

      刪除緩存配置文件后,可以看到輸出的值為自己定義的默認(rèn)值。

      4.5、測試當(dāng) Apollo 中將參數(shù)刪除后客戶端的變化

      這里我們進(jìn)入 Apollo 配置中心,刪除之前創(chuàng)建的test參數(shù),然后發(fā)布。


      然后再次打開地址 http://localhost:8080/test 查看:

      test的值為:默認(rèn)值

      可以看到顯示的是應(yīng)用程序中設(shè)置的默認(rèn)值。

      5. Cluster、Namespace探究

      在Apollo 中,配置可以根據(jù)不同的環(huán)境劃分為 Dev(開發(fā))、Prod(生產(chǎn)) 等環(huán)境,又能根據(jù)區(qū)域劃分為不同的 Cluster(集群),還能根據(jù)配置參數(shù)作用功能的不同劃分為不同的 Namespace(命名空間),這里探究下,如何使用上述能力。

      5.1、不同環(huán)境下的配置

      (1)、Apollo 配置中心 PRO 環(huán)境添加參數(shù)

      打開Apollo 配置中心,環(huán)境列表點擊 PRO 環(huán)境,然后新增一條配置,和之前例子中參數(shù)保持一致,都為test參數(shù),創(chuàng)建完成后發(fā)布。


      然后修改上面的示例項目,將配置參數(shù)指定為 PRO 環(huán)境:

      (2)、示例項目修改 application.yml 配置文件

      apollo.meta參數(shù)改成 RPO 的配置中心地址

      ...... apollo:   meta: http://192.168.2.11:30005            #RPO環(huán)境配置中心地址    ......

      (3)、示例項目修改 JVM 參數(shù)

      apollo.configService參數(shù)改成 PRO 配置中心地址,env參數(shù)的值改為PRO

      -Dapollo.configService=http://192.168.2.11:30005 -Denv=PRO

      (4)、啟動示例項目觀察結(jié)果

      啟動示例項目,然后接著輸入地址 http://localhost:8080/test 查看信息:

      test的值為:abcdefg

      可以看到已經(jīng)改成生成環(huán)境配置,所以在實際項目中,如果要更換環(huán)境,需要修改 JVM 參數(shù)env(如果 Apollo 部署在 Kubernetes 環(huán)境中,還需要修改apollo.configService參數(shù)),和修改 application.yml 配置文件的參數(shù)apollo.meta值。

      5.2、不同集群下的配置

      (1)、創(chuàng)建兩個集群

      例如在開發(fā)過程中,經(jīng)常要將應(yīng)用部署到不同的機房,這里分別創(chuàng)建beijingshanghai兩個集群。




      (2)、兩個集群都配置同樣的參數(shù)不同的值

      在兩個集群beijingshanghai中,都統(tǒng)一配置參數(shù)test,并且設(shè)置不同的值。



      (3)、示例項目 application.yml 修改集群配置參數(shù),并啟動項目觀察結(jié)果

      指定集群為 beijing:

      ...... apollo:   cluster: beijing                      #指定使用 beijing 集群 ......

      啟動示例項目,然后接著輸入地址 http://localhost:8080/test 查看信息:

      test的值為:Cluster-BeiJing

      可以看到用的是 beijing 集群的配置

      指定集群為 shanghai:

      ...... apollo:   cluster: shanghai                      #指定使用 shanghai 集群 ......

      啟動示例項目,然后接著輸入地址 http://localhost:8080/test 查看信息:

      test的值為:Cluster-ShangHai

      可以看到用的是 shanghai 集群的配置

      5.3、不同命名空間下的配置

      (1)、創(chuàng)建兩個命名空間

      命名空間有兩種,一種是 public(公開),一種是 private 私有,公開命名空間所有項目都能讀取配置信息,而私有的只能app.id值屬于該應(yīng)用的才能讀取配置。

      這里創(chuàng)建dev-1dev-2兩個私有的命名空間,用于測試。




      (2)、兩個集群都配置同樣的參數(shù)不同的值

      在兩個命名空間中,都統(tǒng)一配置參數(shù)test,并且設(shè)置不同的值,設(shè)置完后發(fā)布。


      (3)、示例項目 application.yml 修改命名空間配置參數(shù),并啟動項目觀察結(jié)果

      指定命名空間為 dev-1:

      ...... apollo:   bootstrap:     namespaces: dev-1                   #設(shè)置 dev-1 命名空間 ......

      啟動示例項目,然后接著輸入地址 http://localhost:8080/test 查看信息:

      test的值為:dev-1 Namespace

      可以看到用的是 dev-1 命名空間的配置

      指定命名空間為 dev-2:

      ...... apollo:   bootstrap:     namespaces: dev-2                   #設(shè)置 dev-1 命名空間 ......

      YAML

      啟動示例項目,然后接著輸入地址 http://localhost:8080/test 查看信息:

      test的值為:dev-2 Namespace

      HTML

      可以看到用的是 dev-2 命名空間的配置

      6. SpringBoot 應(yīng)用

      本人的Apollo 和 SpringBoot 應(yīng)用一般都是基于 Kubernetes 部署的,所以這里簡單介紹下,如何在 Kubernetes 環(huán)境下部署 SpringBoot 應(yīng)用且使用 Apollo 作為配置中心。

      這里項目依舊使用上面的示例,不過首先要將其編譯成 Docker 鏡像,方便后續(xù)部署到 Kubernetes 環(huán)境下。

      6.1、構(gòu)建 Docker 鏡像

      (1)、執(zhí)行 Maven 編譯

      首先執(zhí)行 Maven 命令,將項目編譯成一個可執(zhí)行 JAR。

      $ mvn clean install

      BASH

      (2)、準(zhǔn)備 Dockerfile

      創(chuàng)建構(gòu)建 Docker 鏡像需要的 Dockerfile 文件,將 Maven 編譯的 JAR 復(fù)制到鏡像內(nèi)部,然后設(shè)置兩個變量,分別是:

      • JAVA_OPTS:Java JVM 啟動參數(shù)變量,這里需要在這里加一個時區(qū)參數(shù)。

      • APP_OPTS:Spring 容器啟動參數(shù)變量,方便后續(xù)操作時能通過此變量配置 Spring 參數(shù)。

      Dockerfile:

      FROM openjdk:8u222-jre-slim VOLUME /tmp ADD target/*.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="-XX:MaxRAMPercentage=80.0 -Duser.timezone=Asia/Shanghai" ENV APP_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $APP_OPTS" ]

      (3)、構(gòu)建 Docker 鏡像

      執(zhí)行Docker Build 命令構(gòu)建 Docker 鏡像。

      $ docker build -t mydlqclub/springboot-apollo:0.0.1 .

      BASH

      6.2、Kubernetes 部署示例應(yīng)用

      (1)、創(chuàng)建 SpringBoot 且使用 Apollo 配置中心的 Kubernetes 部署文件

      這里創(chuàng)建 Kubernetes 下的 SpringBoot 部署文件apollo-demo-example.yaml。在之前 Dockerfile 中設(shè)置了兩個環(huán)境變量,JAVA_OPTSAPP_OPTS。其中JAVA_OPTS變量的值將會作為 JVM 啟動參數(shù),APP_OPTS變量的值將會作為應(yīng)用的配置參數(shù)。所以,這里我們將 Apollo 配置參數(shù)放置到變量中,這樣一來就可以方便修改與維護(hù) Apollo 的配置信息。

      在下面配置的環(huán)境變量參數(shù)中,設(shè)置的配置中心地址為http://service-apollo-config-server-dev.mydlqclub:8080,這是因為 Apollo 部署在 K8S 環(huán)境中,且可以使用域名方式訪問,service-apollo-config-server-dev 是應(yīng)用的 Service 名稱,mydlqcloud 是 K8S 下的 Namespace 名稱。

      springboot-apollo.yaml

      apiVersion: v1 kind: Service metadata:   name: springboot-apollo spec:   type: NodePort   ports:     - name: server       nodePort: 31080       port: 8080       targetPort: 8080     - name: management       nodePort: 31081       port: 8081       targetPort: 8081   selector:     app: springboot-apollo --- apiVersion: apps/v1 kind: Deployment metadata:   name: springboot-apollo   labels:     app: springboot-apollo spec:   replicas: 1   selector:     matchLabels:       app: springboot-apollo   template:     metadata:       name: springboot-apollo       labels:         app: springboot-apollo     spec:       restartPolicy: Always       containers:         - name: springboot-apollo           image: mydlqclub/springboot-apollo:0.0.1           imagePullPolicy: Always           ports:             - containerPort: 8080               name: server           env:             - name: JAVA_OPTS               value: "-Denv=DEV"               ##注意修改此處的 mydlqcloud 為你自己的 Namespace 名稱             - name: APP_OPTS               value: "                      --app.id=apollo-demo                      --apollo.bootstrap.enabled=true                      --apollo.bootstrap.eagerLoad.enabled=false                      --apollo.cacheDir=/opt/data/                      --apollo.cluster=default                      --apollo.bootstrap.namespaces=application                      --apollo.autoUpdateInjectedSpringProperties=true                      --apollo.meta=http://service-apollo-config-server-dev.mydlqcloud:8080                          "           resources:             limits:               memory: 1000Mi               cpu: 1000m             requests:               memory: 500Mi               cpu: 500m

      (2)、部署 SpringBoot 應(yīng)用到 Kubernetes

      -n:創(chuàng)建應(yīng)用到指定的 Namespace 中。

      $ kubectl apply -f springboot-apollo.yaml -n mydlqcloud

      BASH

      6.3、測試部署的應(yīng)用接口

      上面的應(yīng)用配置了 NodePort 端口,可以通過此端口訪問 Kubernetes 集群內(nèi)的應(yīng)用接口,本人 Kubernetes 集群地址為 192.168.2.11 且 NodePort 端口為 31081,所以瀏覽器訪問地址 http://192.168.2.11:31081/test 來測試接口,顯示:

      test的值為:123456

      可以看到能通過 Apollo 獲取參數(shù)值,此文章到此結(jié)束。


      Java精選面試題 (微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、MQ、Redis、SpringBoot、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計、大廠真題等,在線隨時刷題!

      來源 | 網(wǎng)絡(luò)

      公眾號“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請聯(lián)系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有技術(shù)或摸魚交流群!加入方式很簡單,公眾號Java精選,回復(fù)“加群”,即可入群!在線摸魚:https://www.yoodb.com/

      文章有幫助的話,點在看,轉(zhuǎn)發(fā)吧!

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點推薦
      水貨實錘?才一年就全面下滑,這可是狀元啊,老鷹虧大發(fā)了

      水貨實錘?才一年就全面下滑,這可是狀元啊,老鷹虧大發(fā)了

      球童無忌
      2025-12-20 23:40:16
      輸吉林發(fā)布會!劉煒將防守甩鍋納托爾,不滿籃板,西爾扎提談失誤

      輸吉林發(fā)布會!劉煒將防守甩鍋納托爾,不滿籃板,西爾扎提談失誤

      籃球資訊達(dá)人
      2025-12-21 02:56:57
      停飛中國航班,拒絕中國游客,這個在東南亞小國”處處和中國作對

      停飛中國航班,拒絕中國游客,這個在東南亞小國”處處和中國作對

      南權(quán)先生
      2025-12-20 17:01:37
      68歲青島市人大常委會原主任被查,今年已有61名中管干部落馬

      68歲青島市人大常委會原主任被查,今年已有61名中管干部落馬

      上觀新聞
      2025-12-19 18:57:02
      寧波衛(wèi)健委回應(yīng)小洛熙事件最新進(jìn)展:醫(yī)療事故鑒定仍在進(jìn)行

      寧波衛(wèi)健委回應(yīng)小洛熙事件最新進(jìn)展:醫(yī)療事故鑒定仍在進(jìn)行

      極目新聞
      2025-12-20 19:49:35
      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      趣文說娛
      2025-12-20 18:29:20
      2026央視跨年晚會陣容曝光,看完明星名單難掩激動,該來的都來了

      2026央視跨年晚會陣容曝光,看完明星名單難掩激動,該來的都來了

      阿纂看事
      2025-12-19 14:38:58
      僅差32次!僅差45個!老詹迎來兩項神級里程碑,愈老愈妖

      僅差32次!僅差45個!老詹迎來兩項神級里程碑,愈老愈妖

      世界體育圈
      2025-12-20 13:22:08
      掛斷中方電話后,馬杜羅下令出兵,油輪保衛(wèi)戰(zhàn)打響,白宮措辭變強

      掛斷中方電話后,馬杜羅下令出兵,油輪保衛(wèi)戰(zhàn)打響,白宮措辭變強

      策前論
      2025-12-20 23:12:33
      12架日機攜48導(dǎo)彈直撲遼寧艦,美媒直接報喪:被解放軍全面碾壓?

      12架日機攜48導(dǎo)彈直撲遼寧艦,美媒直接報喪:被解放軍全面碾壓?

      科普100克克
      2025-12-16 16:26:18
      央企“最牛女副處長”落馬:兩年與上司開房410次,細(xì)節(jié)曝光

      央企“最牛女副處長”落馬:兩年與上司開房410次,細(xì)節(jié)曝光

      西門老爹
      2025-12-16 15:35:31
      普京拒付金正恩派兵報酬,因朝鮮軍隊?wèi)?zhàn)績不佳,僅支付20%報酬

      普京拒付金正恩派兵報酬,因朝鮮軍隊?wèi)?zhàn)績不佳,僅支付20%報酬

      環(huán)球熱點快評
      2025-12-17 09:19:03
      上海一對情侶戀愛時男方說“我養(yǎng)你”,分手后女方以此為證,拒絕返還40余萬元!測謊實驗后,法院判了

      上海一對情侶戀愛時男方說“我養(yǎng)你”,分手后女方以此為證,拒絕返還40余萬元!測謊實驗后,法院判了

      都市快報橙柿互動
      2025-12-20 09:35:12
      商K上線了新花樣…

      商K上線了新花樣…

      微微熱評
      2025-12-20 15:22:00
      明宣宗朱瞻基陵墓,下周一開放

      明宣宗朱瞻基陵墓,下周一開放

      上觀新聞
      2025-12-20 16:31:19
      市監(jiān)局通報“南極磷蝦油”事件:已成立聯(lián)合調(diào)查組進(jìn)駐北京同仁堂(四川)健康藥業(yè)有限公司開展調(diào)查,已對該企業(yè)立案

      市監(jiān)局通報“南極磷蝦油”事件:已成立聯(lián)合調(diào)查組進(jìn)駐北京同仁堂(四川)健康藥業(yè)有限公司開展調(diào)查,已對該企業(yè)立案

      極目新聞
      2025-12-20 19:28:56
      國乒教練組巨震,林詩棟新教練讓人意外,王曼昱主管教練情理之中

      國乒教練組巨震,林詩棟新教練讓人意外,王曼昱主管教練情理之中

      月亮的麥片
      2025-12-20 21:18:01
      繼父、同母異父弟弟?墜亡女教師身世曝光,這才是她走絕路的真相

      繼父、同母異父弟弟?墜亡女教師身世曝光,這才是她走絕路的真相

      知法而形
      2025-12-19 23:33:57
      1984年他一聲令下,把老山幾千噸炮彈當(dāng)水潑,2019年葬禮現(xiàn)場,昔日部下已是軍委副主席,含淚送別這位鐵血師長!

      1984年他一聲令下,把老山幾千噸炮彈當(dāng)水潑,2019年葬禮現(xiàn)場,昔日部下已是軍委副主席,含淚送別這位鐵血師長!

      史海孤雁
      2025-12-17 16:50:24
      凡人微光 | “童”行有你

      凡人微光 | “童”行有你

      新華社
      2025-12-20 13:14:20
      2025-12-21 05:43:00
      Java精選
      Java精選
      一場永遠(yuǎn)也演不完的戲
      1764文章數(shù) 3859關(guān)注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      高市早苗擔(dān)心被邊緣化 要趕在特朗普訪華前行動

      頭條要聞

      高市早苗擔(dān)心被邊緣化 要趕在特朗普訪華前行動

      體育要聞

      我開了20年大巴,現(xiàn)在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經(jīng)要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進(jìn)L3量產(chǎn)測試 已完成11萬公里實際道路驗證

      態(tài)度原創(chuàng)

      教育
      旅游
      手機
      藝術(shù)
      軍事航空

      教育要聞

      中產(chǎn)留學(xué)家庭起飛三件套!

      旅游要聞

      不止紅墻白雪!故宮淡季爆火,藏著中國文旅升級的大信號

      手機要聞

      vivo X200T再曝,天璣 9400+芯片加持

      藝術(shù)要聞

      中國老香煙品牌,你知道多少?

      軍事要聞

      澤連斯基:前線局勢愈發(fā)艱難

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 亚洲国产在一区二区三区| 亚洲国产成人极品综合| 人妻色综合网站| 亚洲综合网国产精品一区| 国产成人啪精品视频免费软件| AV一区二区三区| 懂色av,蜜臀AV粉嫩av| 熟女中文字幕| 成人黄色国产| 色妞www精品免费视频| 国产成人AV| 国产精品午夜福利免费看| 无码入口| 人人妻人人澡人人爽人人欧美一区| 嘉峪关市| 精品无码一区二区三区水蜜桃| 熟妇与小伙子matur老熟妇e| 亚洲精品电影院| 亚洲av日韩精品| 久久精品一卡二卡| 日日噜噜夜夜爽爽| 成人高清无码| 自拍偷拍欧美| 洞头县| 国产女高清在线看免费观看| 国产综合久久久久久鬼色| 无码av最新无码av专区| 熟女?国产?精品| 亚洲中文字幕A| 国产jjizz女人多水喷水| 在线 欧美 中文 亚洲 精品| 丁香婷婷五月| 鹤壁市| 播放灌醉水嫩大学生国内精品| 中文字幕久久久久人妻中出| 日韩大香蕉| 久久精品一卡二卡| 日本精品一区二区三区四区| 思思久99久女女精品| 灵川县| 亚洲乱码日产精品bd在线看|