文章目錄
- 進行服務降級操作
- 1.創建DeptClientServiceFallbackFactory類,實現FallbackFactory
- 2.在DeptClientService接口中的FeignClient註釋中,修改屬性fallbackFactory
- 3.在Feign消費者的yml中,配置降級
- 4.此時開啓一系列服務,並搜索不存在的id
- 5.關閉服務提供者,依舊可以返回指定的降級信息
- 服務熔斷和服務降級的區別再理解
- DashBoard流監控
- 9.路由網關Zuul
- 10.SpringCloud config分佈式配置
- 分佈式系統面臨的-配置文件的問題
- 什麼是SpringCloud config分佈式配置中心
- SpringCloud Config分佈式配置中心能幹嘛?
- Springcloud config 分佈式配置中心與github整合
- 服務端連接Git配置
- 1.在碼雲新建遠程倉庫: [springcloud-config](https://gitee.com/wood_never_drunk/springcloud-config)
- 2.在本機寫application.yml,並放置克隆的項目目錄下,如上圖
- 3.建springcloud-config-server-3344模塊
- 4.啓動config服務,並訪問 http://localhost:3344/application-dev.yml
- 客戶端連接服務端訪問:
進行服務降級操作
1.創建DeptClientServiceFallbackFactory類,實現FallbackFactory
@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory{
@Override
public DeptClientService create(Throwable throwable) {
return new DeptClientService() {
@Override
public Dept queryById(Long id) {
return new Dept()
.setDeptno(id)
.setDname("id=>"+id+"沒有對應的信息,客戶端提供了降級的信息,這個服務現在已經被關閉")
.setDb_source("沒有數據");
}
@Override
public List<Dept> queryAll() {
return null;
}
@Override
public boolean addDept(Dept dept) {
return false;
}
};
}
}
2.在DeptClientService接口中的FeignClient註釋中,修改屬性fallbackFactory
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
3.在Feign消費者的yml中,配置降級
#開啓降級feign.hystrix
feign:
hystrix:
enabled: true
4.此時開啓一系列服務,並搜索不存在的id
5.關閉服務提供者,依舊可以返回指定的降級信息
服務熔斷和服務降級的區別再理解
服務熔斷:用於服務端,某個服務超時或者異常,引起熔斷, 類似於保險絲。
服務降級:用於客戶端,從整體網站請求負載考慮,當某個服務熔斷或者關閉之後,服務不再被調用
,此時在客戶端,我們可以準備一個FallbackFactory,返回一個默認的值,整體的服務水平下降了,但好歹能用,比直接掛掉強。
DashBoard流監控
1.寫一個監控頁面
(1)創建springcloud-consumer-hystrix-dashboard模塊
(2)導包
<!--實體類web-->
<dependencies>
<!--Hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--Ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!--Eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.muzi</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--熱部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
(3)在dashborad消費者的yml中設置端口號爲9001
server:
port: 9001
(4)創建啓動類
@SpringBootApplication
//開啓監控Dashboard流監控
@EnableHystrixDashboard
public class DeptConsumerDashboard_9001 {
public static void main(String[] args){
SpringApplication.run(DeptConsumerDashboard_9001.class,args);
}
}
2.保證每一個服務提供者的POM中已經導入這個依賴
<!--actuator完善監控信息-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.在hystrix服務提供者的啓動類中創建Servlet(隨機選擇一個服務提供者)
//增加一個Servlet
@Bean
public ServletRegistrationBean HystrixMetricsStreamServlet(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
registrationBean.addUrlMappings("/actuator/hystrix.stream");
return registrationBean;
}
4.先開啓服務註冊中心,再開啓服務提供者8001,再開啓dashboard流監控頁面
(1)訪問監控頁面
(2)寫入http://localhost:8001/actuator/hystrix.stream
(3)開啓消費者80,進行查詢操作
相應地,監控頁面會有一定變化
(4)若直接訪問http://localhost:8001/actuator/hystrix.stream,則跳轉
5.分析監控頁面數據含義
整圖說明:
9.路由網關Zuul
什麼是Zuul?
Zuul包含了對請求的路由和過濾兩個最主要的功能:
其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎,而過濾器功能則負責對請求的處理進行干預,是實現請求校驗,服務聚合等功能的基礎。Zuul和Eureka進行整合,將Zuul自身註冊爲Eureka服務治理下的應用,同時從Eureka中獲得其他微服務的信息,也即以後的訪問微服務都是通過Zuul跳轉後獲得。
zhuy :Zuul服務最終還是會註冊進Eureka
提供:代理+路由+過濾 三大功能。
Zuul能幹嘛?
○路由
○過濾
使用Zuul
1.創建springcloud-zuul-9527模塊
模塊結構:
2.導入依賴
<!--zuul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
3.在yml中進行配置
server:
port: 9527
spring:
application:
name: springcloud-zuul
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
instance:
instance-id: zuul9527.com
prefer-ip-address: true
info:
app.name: muzi-springcloud
company.name: blog.muzistudy.com
zuul:
routes:
#服務提供者的名字
mydept.serviceId: springcloud-provider-dept
#通過mydept來訪問,隱藏項目細節
mydept.path: /mydept/**
#不允許通過springcloud-provider-dept來訪問
#ignored-services: springcloud-provider-dept
#隱藏全部的真實項目名,(微服務不止一個)
ignored-services: "*"
#設置統一的前綴
prefix: /muzi
4.創建啓動類ZuulApplication_9527
@SpringBootApplication
//開啓Zuul
@EnableZuulProxy
public class ZuulApplication_9527 {
public static void main(String[] args){
SpringApplication.run(ZuulApplication_9527.class,args);
}
}
5.在host文件中設置本機路徑
6.啓動服務註冊中心,再啓動服務提供者,再啓動Zuul模塊,再啓動消費者
訪問路徑: http://www.muzistudy.com:9527/muzi/mydept/dept/get/6
10.SpringCloud config分佈式配置
分佈式系統面臨的-配置文件的問題
微服務意味着要將單體應用中的業務分成一個個子服務,每個服務的粒度相對較小,因爲系統中會出現大量的服務,由於每個服務都需要必要的配置信息才能運行,所以一套集中式的,動態的配置管理設施是必不可少的。
SpringCloud提供了ConfigServer來解決這個問題,我們每一個微服務自己帶着一個application.yml,那上百的配置文件要修改,豈不是要發瘋。
什麼是SpringCloud config分佈式配置中心
SpringCloud Config爲微服務架構中的微服務提供集中化的外部配置支持,配置服務器爲各個不同微服務應用的所有環節提供了一箇中心化外部配置。
SpringCloud Config分爲服務端和客戶端兩部分。
服務端也稱爲分佈式配置中心,它是一個獨立的微服務應用,用來連接配置服務器併爲客戶端提供獲取配置信息,加密,解密信息等訪問接口。
客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啓動的時候從配置中心獲得和加載配置信息。配置服務器more採用git來存儲配置信息,這樣就有助於對環境配置進行版本管理。並且可以通過git客戶端工具來方斌的管理和訪問配置內容。
SpringCloud Config分佈式配置中心能幹嘛?
○集中管理配置文件
○不同環境,不同配置,動態化的配置更新,分環境部署,比如/dev /test/ /prod /beta /release
○運行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置自己的信息。
○當配置發生變動時,服務不需要重啓,即可感知到配置的變化,並應用新的配置。
○將配置信息以REST接口的形式暴露
Springcloud config 分佈式配置中心與github整合
由於SpringCloud config默認使用Git來存儲配置文件(也有其他方式,比如支持SVN和本地文件),但是最推薦的還是,而且使用的是http/https訪問的形式。
服務端連接Git配置
1.在碼雲新建遠程倉庫: springcloud-config
複製項目git連接
通過git clone命令克隆文件到本機
2.在本機寫application.yml,並放置克隆的項目目錄下,如上圖
spring:
profiles:
active: dev
---
spring:
profiles: dev
application:
name: springcloud-config-dev
---
spring:
profiles: test
application:
name: springcloud-config-test
通過 git add, git commit -m “first commit”, git push origin master 三個命令提交到遠程倉庫
3.建springcloud-config-server-3344模塊
(1)導入依賴
<dependencies>
<!--config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
(2)在yml進行配置
server:
port: 3344
spring:
application:
name: springcloud-config-server
#連接遠程倉庫
cloud:
config:
server:
git:
#遠程倉庫的https地址
uri: https://gitee.com/wood_never_drunk/springcloud-config.git
(3)建啓動類
@SpringBootApplication
@EnableConfigServer
public class Config_Server_3344 {
public static void main(String[] args){
SpringApplication.run(Config_Server_3344.class,args);
}
}
4.啓動config服務,並訪問 http://localhost:3344/application-dev.yml
能夠遠程訪問倉庫配置
客戶端連接服務端訪問:
1.在克隆文件中建config-client.yml文件,並提交到遠程倉庫
spring:
profiles:
active: dev
----
server:
port: 8201
#spring的配置
spring:
profiles: dev
application:
name: springcloud-provider-dept
#Eureka配置,服務註冊到哪裏
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
-----
server:
port: 8202
#spring的配置
spring:
profiles: test
application:
name: springcloud-provider-dept
#Eureka配置,服務註冊到哪裏
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
2.創建springcloud-config-client-3355模塊
模塊結構
(1)導依賴
<dependencies>
<!--config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
(2)建application.yml和bootstrap.yml進行配置
#bootstrap.yml系統級別的配置spring:
spring:
cloud:
config:
#需要從git上讀取的資源名稱,不要後綴
name: config-client
profile: dev
label: master
#連接服務端
uri: http://localhost:3344
#application.yml用戶級別的配置
spring:
application:
name: springcloud-config-client-3355
(3)建啓動類
@SpringBootApplication
public class Config_Client_3355 {
public static void main(String[] args){
SpringApplication.run(Config_Client_3355.class,args);
}
}
(4)建ConfigClientController類
@RestController
public class ConfigClientController {
@Value("${spring.application.name}")
private String applicationName;
@Value("${eureka.client.service-url.defaultZone}")
private String eurekaServer;
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String getConfig(){
return "applicationName:"+applicationName+
"eurekaServer:"+eurekaServer+
"port:"+port;
}
}
3.啓動服務,server和client