基於Spring Cloud企業微信點餐專案實戰
Spring Cloud簡介
Spring Cloud是一個基於Spring Boot實現的微服務架構開發工具。它為微服務架構中設計的配置管理,服務治理,斷路器,智慧路由,微代理,控制匯流排,全域性鎖,決策競選,分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。
Spring Cloud子專案
① Spring Cloud Config:配置管理工具,支援使用Git儲存配置內容,可以使用它實現應用配置的外部化儲存,並支援客戶端配置資訊重新整理,加密/解密配置內容等。
② Spring Cloud Netflix:核心元件,對多個Netflix OSS開源套件進行整合。
- Eureka:服務治理元件,包含服務註冊中心、服務註冊與發現機制的實現。
- Hystrix:容錯管理元件,實現斷路器模式,幫助服務依賴中出現的延遲和為故障提供強大的容錯能力。
- Ribbon:客戶端負載均衡的服務呼叫元件。
- Feign:基於Ribbon和Hystrix的宣告式服務呼叫元件。
- Zuul:閘道器元件,提供智慧路由、訪問過濾等功能。
- Archaius:外部化配置元件。
③ Spring Cloud Bus:事件、訊息匯流排,用於傳播叢集中的狀態變化或事件,以觸發後續的處理,比如用來動態重新整理配置。
④ Spring Cloud Cluster:針對ZooKeeper、Redis、Hazelcast、Consul的選舉演算法和通用狀態模式的實現。
⑤ Spring Cloud Consul:服務發現與配置管理工具。
⑥ Spring Cloud Stream:通過Redis、Rabbit或者Kafka實現的消費微服務,可以通過簡單的宣告式模型來發送和接收訊息。
⑦ Spring Cloud Security:安全工具包,提供在Zuul代理中對OAuth2客戶端請求的中繼器。
⑧ Spring Cloud Sleuth:Spring Cloud 應用的分散式跟蹤實現,可以完美整合 Zipkin。
⑨ Spring Cloud ZooKeeper:基於ZooKeeper 的服務發現與配置管理元件。
⑩ Spring Cloud Starters:Spring Cloud 的基礎元件,它是基於Spring Boot 風格專案的基礎依賴模組。
元件架構
實戰專案簡介(Springcloud_Sell)
本次實戰以Springboot+maven為基礎進行快速配置,採用分散式微服務架構下的一站式解決方案Spring Cloud,整合元件Eureka+Config+Zuul+Feign/Ribbon+Hystrix+RabbitMQ+Redis+Sleuth+ZipKin。
開發環境:JDK1.8+MySQL5.7 + IDEA
Git地址:https://gitee.com/jiayuan1234/Springcloud_Sell
專案模組主要有:api-gateway(閘道器),client(客戶端),config(配置中心),erurka(服務註冊與發現中心),order(訂單模組),product(商品模組),user(使用者模組)
專案包結構:
搭建服務註冊中心(eureka)
建立一個基礎的springboot工程,命名為eureka,並在pom.xml中引入相關依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
通過@EnableEurekaServer註解啟動一個服務註冊中心提供給其他應用進行註冊,通過springboot工程一鍵部署和啟動
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
application.yml配置如下,在預設配置下,該服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們可以選擇禁用它的客戶端註冊行為,即 eureka.client.register-with-eureka: false
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8761
在完成如上配置後,啟動工程,訪問 http://localhost:8761/ ,顯示eureka註冊中心面板如下
註冊服務提供者(client)
完成了註冊中心的搭建,嘗試將一個springboot應用註冊到eureka的服務治理體系中去,搭建一個springboot應用並加入如下依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
client端配置檔案如下:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
#instance:
# hostname: clientName
spring:
application:
name: client
server:
port: 8081
通過@EnableEurekaClient註解啟動一個eureka客戶端,提供服務,進行服務註冊,@EnableEurekaClient本身就是用@EnableDiscoveryClient來實現的
@SpringBootApplication
@EnableEurekaClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
在eureka註冊中心頁面重新整理,此時client已經將服務註冊到eureka上
統一配置中心(config)
建立一個springboot應用,pom.xml依賴以上面客戶端相同,同樣將自己作為一個客戶端服務,也是要註冊到eureka中去的,application.yml配置檔案如下,將遠端Git地址和賬號密碼配置到檔案中去,用於向遠端檔案拉取相關配置。注意,配置中心拉取的配置會與本地已有配置進行合併,若相同則覆蓋。
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://gitee.com/jiayuan1234/config-repo
username: [email protected]
password: **********
basedir: D:\MyData\workspace\IDEA\SpringCloud_Sell\config\basedir
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
management:
endpoints:
web:
exposure:
include: "*"
server:
port: 8082
遠端Git配置檔案
啟動config專案,獲取配置檔案內容
(未完待續~)