瘋狂創客圈 Java 高並發【 億級流量聊天室實戰】實戰系列 【博客園總入口 】
架構師成長+面試必備之 高並發基礎書籍 【Netty Zookeeper Redis 高並發實戰 】
前言
Crazy-SpringCloud 微服務腳手架 &視頻介紹:
Crazy-SpringCloud 微服務腳手架,是為 Java 微服務開發 入門者 准備的 學習和開發腳手架。並配有一系列的使用教程和視頻,大致如下:
高並發 環境搭建 圖文教程和演示視頻,陸續上線:
中間件 | 鏈接地址 |
---|---|
Linux Redis 安裝(帶視頻) | Linux Redis 安裝(帶視頻) |
Linux Zookeeper 安裝(帶視頻) | Linux Zookeeper 安裝, 帶視頻 |
Windows Redis 安裝(帶視頻) | Windows Redis 安裝(帶視頻) |
RabbitMQ 離線安裝(帶視頻) | RabbitMQ 離線安裝(帶視頻) |
ElasticSearch 安裝, 帶視頻 | ElasticSearch 安裝, 帶視頻 |
Nacos 安裝(帶視頻) | Nacos 安裝(帶視頻) |
Crazy-SpringCloud 微服務腳手架 圖文教程和演示視頻,陸續上線:
組件 | 鏈接地址 |
---|---|
Eureka | Eureka 入門,帶視頻 |
SpringCloud Config | springcloud Config 入門,帶視頻 |
spring security | spring security 原理+實戰 |
Spring Session | SpringSession 獨立使用 |
分布式 session 基礎 | RedisSession (自定義) |
重點: springcloud 開發腳手架 | springcloud 開發腳手架 |
SpingSecurity + SpringSession 死磕 (寫作中) | SpingSecurity + SpringSession 死磕 |
小視頻以及所需工具的百度網盤鏈接,請參見 瘋狂創客圈 高並發社群 博客
1 Config 配置中心簡介
在分布式微服務架構系統中,由於服務數量巨多,為了方便服務配置文件統一管理,所以需要分布式配置中心組件。如果各個服務的配置分散管理,則,上線之后配置的如何保持一致會是一個很頭疼的問題。
所以,各個服務的配置定然需要集中管理。SpringCloud Config 配置中心是一個比較好的解決方案。使用SpringCloud Config配置中心,涉及到兩個部分:
(1)config-server 服務端配置;
(2)config-client 客戶端配置。
2 config-server 服務端配置
通過SpringCloud 構建一個 config-server 服務,大致需要三步。首先,在pom.xml中引入spring-cloud-config-server 依賴,大致如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
其次,在所創建的 SpringBoot的程序主類上,添加@EnableConfigServer注解,開啟Config Server 服務,代碼如下:
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 的命令規范,放置對應的配置文件。上面實例,放置了以下配置文件:
/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-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 高並發實戰》
瘋狂創客圈 Java 死磕系列
- Java (Netty) 聊天程序【 億級流量】實戰 開源項目實戰
- Netty 源碼、原理、JAVA NIO 原理
- Java 面試題 一網打盡
- 瘋狂創客圈 【 博客園 總入口 】