瘋狂創客圈 經典圖書 : 《Netty Zookeeper Redis 高併發實戰》 面試必備 + 面試必備 + 面試必備 【博客園總入口 】html
瘋狂創客圈 經典圖書 : 《SpringCloud、Nginx高併發核心編程》 大廠必備 + 大廠必備 + 大廠必備 【博客園總入口 】java
入大廠+漲工資必備: 高併發【 億級流量IM實戰】 實戰系列 【 SpringCloud Nginx秒殺】 實戰系列 【博客園總入口 】linux
《SpringCloud Nginx 高併發核心編程》 環境搭建 圖文教程和演示視頻:git
組件 | 連接地址 |
---|---|
【必須】 虛擬機Linux 開發環境準備 | windows vmware 擴展硬盤 + 共享文件 |
Linux openresty 安裝 | Linux openresty 安裝 |
【必須】Linux Redis 安裝(帶視頻) | Linux Redis 安裝(帶視頻) |
【必須】Linux Zookeeper 安裝(帶視頻) | Linux Zookeeper 安裝, 帶視頻 |
Windows Redis 安裝(帶視頻) | Windows Redis 安裝(帶視頻) |
RabbitMQ 離線安裝(帶視頻) | RabbitMQ 離線安裝(帶視頻) |
ElasticSearch 安裝, 帶視頻 | ElasticSearch 安裝, 帶視頻 |
Nacos 安裝(帶視頻) | Nacos 安裝(帶視頻) |
【必須】Eureka | Eureka 入門,帶視頻 |
【必須】springcloud Config 入門,帶視頻 | springcloud Config 入門,帶視頻 |
【必須】SpringCloud 腳手架打包與啓動 | SpringCloud腳手架打包與啓動 |
在分佈式微服務架構系統中,因爲服務數量巨多,爲了方便服務配置文件統一管理,因此須要分佈式配置中心組件。若是各個服務的配置分散管理,則,上線以後配置的如何保持一致會是一個很頭疼的問題。
因此,各個服務的配置定然須要集中管理。SpringCloud Config 配置中心是一個比較好的解決方案。使用SpringCloud Config配置中心,涉及到兩個部分:
(1)config-server 服務端配置;
(2)config-client 客戶端配置。面試
經過SpringCloud 構建一個 config-server 服務,大體須要三步。首先,在pom.xml中引入spring-cloud-config-server 依賴,大體以下:redis
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
其次,在所建立的 SpringBoot的程序主類上,添加@EnableConfigServer註解,開啓Config Server 服務,代碼以下:spring
package com.crazymaker.cloud.center.config; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableConfigServer //開啓配置服務器的支持 @EnableEurekaClient // 開啓 Eureka 客戶端的支持 public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
第三步,設置屬性文件的位置。SpringCloud Config 提供本地存儲配置的方式。在bootstrap啓動屬性文件中,設置屬性 spring.profiles.active=native,而且設置屬性文件所在的位置,大體以下:數據庫
server: port: 7788 #配置中心端口 spring: application: name: config-server # 服務名稱 profiles: active: native # 設置讀取本地配置文件 cloud: config: server: native: searchLocations: classpath:config/ #申明本地配置文件的存放位置
配置說明:
(1)spring.profiles.active=native,表示讀取本地配置,而不是從git讀取配置。
(2)search-locations=classpath:config/ 表示查找文件的路徑,在類路徑的config下。編程
服務端的配置規則:在配置路徑下,以 {label}/{application}-{profile}.properties 的命令規範,放置對應的配置文件。上面實例,放置瞭如下配置文件:bootstrap
/dev/crazymaker-common.yml /dev/crazymaker-db.yml /dev/crazymaker-redis.yml
分別對通用配置common、數據庫配置db、緩存配置的相關屬性,進行設置。Config 配置中心啓動以後,使用 http:// ${CONFIG-HOST}: ${CONFIG-PORT}/{application}/{profile}[/{label}] 的地址格式,能夠直接訪問所加載好的配置屬性。
例如,訪問示例中的 http://192.168.233.128:7788/crazymaker/redis/dev 地址,返回的配置信息以下圖所示。
SpringCloud config-server 支持有多種配置方式,好比 Git,native,SVN 等。
雖然官方建議使用Git方式進行配置,這裏沒有重點介紹 Git方式,而是使用本地文件的方式,有三個緣由:
(1) 對於學習或者通常的開發來講,本地的文件的配置方式更簡化;
(2) 生產環境建議使用 Nacos,集成註冊中心和配置中心,更加方便和簡單;
(3) 掌握了native的配置方式以後,Git 的配置方法能舉一反三,由於思惟上是趨同的。
客戶端 config-client 同 config-server 同樣,須要新增 spring-cloud-starter-eureka 的依賴用來註冊服務。而後增長 spring-cloud-starter-config 依賴 ,引入配置相關的 jar 包。
<dependencies> //…. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies>
在bootstrap.properties中,按以下規則,增長客戶端配置的映射規則:
spring.cloud.config.label:dev #對應服務器端規則中的{label}部分。 spring.application.name:crazymaker #對應服務器端規則中的{application}部分。 spring.cloud.config.profile:redis #對應服務器端規則中的{profile}部分。 spring.cloud.config.uri:http://${CONFIG-HOST}:7788/ #配置中心 config-server 的獨立uri地址。
若是是和Eureka的客戶端配合使用,建議開啓配置服務的自動發現機制,則使用以下配置:
spring.cloud.config.discovery.enabled: true spring.cloud.config.discovery.service-id: config-server
配置中心的兩種發現機制,不能同時存在,兩者選其一便可。
有關客戶端 config 屬性加載的相關配置,必須配置在 bootstrap.properties (或bootstrap.yml)中,config 部份內容才能被正確加載。緣由是:config 的相關配置會先於application.properties,而 bootstrap.properties 的加載也是先於 application.properties的。
下面是本演示實例所用到的環境變量:
export DB_HOST=192.168.233.128 export REDIS_HOST=192.168.233.128 export EUREKA_ZONE_HOST=192.168.233.128 export RABBITMQ_HOST=192.168.233.128 export ZOOKEEPER_HOSTS=192.168.233.128
這些環境變量,包含 Eureka、Redis、RabbitMq 等服務器的IP地址。若是在bootstrap.yml中要對 Eureka 進行配置,能夠使用環境變量 EUREKA_ZONE_HOST ,具體以下:
eureka: client: serviceUrl: defaultZone: http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/
上面的寫法,經過${EUREKA_ZONE_HOST} 表達式去獲取Eureka的IP地址。而且,環境變量後面跟着一個冒號和一個默認值,表示若是當前系統環境變量中 EUREKA_ZONE_HOST 爲空時,就會使用默認值 localhost 來填充了。
總之,經過環境變量的使用,使得各類服務器的主機切換,多了一層靈活性。並且,能夠作到不用明文編碼一些密碼之類的敏感信息,多了一層安全性。
首先須要本地測試經過。
(1)打包:
maven 打包工具。
(2)部署:
部署到linux服務器,解壓縮,而後 start.sh 腳本啓動。
(3) 訪問
http://192.168.233.128:7788/crazymaker/redis/dev
(4) 視頻示意(具體視頻,請參見 博客園 總入口 )
具體,請關注 Java 高併發研習社羣 【博客園 總入口 】
最後,介紹一下瘋狂創客圈:瘋狂創客圈,一個Java 高併發研習社羣 【博客園 總入口 】
瘋狂創客圈,傾力推出:面試必備 + 面試必備 + 面試必備 的基礎原理+實戰 書籍 《Netty Zookeeper Redis 高併發實戰》