spring cloud 01
1·spring cloud 提供分布式系統工具
配置中心、服務發現、熔斷(超時錯誤處理)、路由(攔截)、微代理、控制總線、leader選舉、分布式session、集群狀態
2·已接觸子項目
config,配置項目+配置中心(本地、git、subversion)
netflix,開發工具包,包括eureka、hystrix、zuul、archaius等
hystrix,容錯管理工具
zuul,邊緣服務工具,提供動態路由,監控,彈性,安全服務
3·服務發現模塊
1·pom文件
spring-cloud-starter-eureka-server
2·在APP類上添加@EnableEurekaServer註解
3·配置文件
server.port=1111
#禁用它的客戶端註冊行為
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#註冊中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4·生產者
1·pom依賴
spring-cloud-starter-eureka
2·在APP類上添加@EnableDiscoveryClient註解
3·配置信息
#服務實例名
spring.application.name
server.port=2222
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
5·消費者
1·使用ribbon做負載均衡
ribbon是基於http和tcp客戶端的負載均衡器,通過客戶端中配置的ribbonServerList服務端列表去輪詢訪問
當ribbon和eureka聯合時,ribbobServerList被discoveryEnabledNIWSServerList重寫,擴展為從eureka註冊中心獲取服務端列表。同時用NIWSDiscoveryPing來去掉IPing
2·ribbon使用
pom依賴:spring-cloud-starter-ribbon
APP類上@EnableDiscoveryClient
註解來添加發現服務能力,@EnableFeignClients註解請求其他服務
APP類中創建restTemplate實例,並通過@loadBalanced+@bean註解開啟負載均衡
6·斷路器(處理延時、出錯故障)
向調用方返回一個錯誤相應,而不是長時間的等待
spring cloud中使用hystrix
使用
1·pom依賴
spring-cloud-starter-hystrix
2·APP類上@EnableCircuitBreaker來開啟斷路器功能
3·在使用ribbon消費服務的函數上增加@HystrixCommand
註解來指定回調方法。
feign使用Hystrix
pom不需要引入hystrix,feign中已經依賴了
使用@feignClient註解的fallback屬性指定回調類
創建回調類實現這個借口,實現錯誤處理方法
7·配置中心
原理
git上存放配置文件
config-server連接到git
config-client連接到config-server
啟動config-client時,config-client通過config-server拿到遠程git上的配置文件,通過soring加載到對象中
使用
1·添加pom依賴
spring-cloud-config-server
2·APP類上@EnableConfigServer
3·配置文件
spring.application.name=config-server
server.port=7001
spring.cloud.config.server.git.uri=http://git.oschina.net/zjb_china/SpringCloud-Learning
spring.cloud.config.server.git.searchPaths=Chapter9-1-4/config-repo
spring.cloud.config.server.git.username=username
spring.cloud.config.server.git.password=password
4·倉庫一般有四類文件
-
- users.properties
- users-dev.properties
- users-test.properties
- users-prod.properties
5`url和配置文件的映射關系
/{label}/{application}-{profile}.yml,{label}對應git上不同的分支,默認為master
例:要訪問dev2分支,users應用的prod環境,可以通過:http://localhost:7001/users/prod/dec2
6`消費者如何獲取配置信息
1`pom依賴:spring-cloud-starter-config
2`boostrap.yml配置config-server
spring.application.name=users
spring.cloud.config.profile=test
spring.cloud.config.label=dev2
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.discovery.enabled=true
server.port=7002
3`@Value("${from}")
private String from;綁定配置服務中心配置的from屬性
7·不重啟config-client情況下更新配置信息
client中添加pom依賴:spring-boot-starter-actuator
在需要自動更新配置的java類上@RefreshScope 修飾
以後更新git上配置文件時候,config客戶端執行http://localhost:8080/refresh 就可以更新刷新配置變量到內存中了
那麽問題來了,集群怎麽辦?
使用spring cloud bus解決
需要依賴AMQP、Redis、Kafka組件
spring cloud 01