-----------------------------------------------------------------------------css
spring boot 1.我理解就是把 spring spring mvc spring data jpa 等等的一些經常使用的經常使用的基礎框架組合起來,
提供默認的配置,而後提供可插拔的設計,就是各類 starter ,來方便開發者使用這一系列的技術。html
2.之前須要關注版本兼容和一堆配置整合文件,
如今能夠先不關心如何配置,能夠快速的啓動開發,進行業務邏輯編寫,
各類須要的技術,加入 starter 就配置好了,直接使用,能夠說追求開箱即用的效果吧。ios
3.對使用者來講,換用Spring Boot之後,項目初始化方法變了,配置文件變了,
另外就是不須要單獨安裝Tomcat這類容器服務器了,maven打出jar包直接跑起來就是個網站,但你最核心的業務邏輯實現與業務流程實現沒有任何變化。
4.4.0版本是Spring框架最新發布的主版本,而且首次徹底支持Java8的功能。你依然可使用較早的Java版本,可是如今所需的最小的版本已經被提高的Java SE6。
同時還利用主版本發佈的機會刪除了不少廢棄的類和方法。
5.Spring 是一個「引擎」;
Spring MVC 是基於Spring的一個 MVC 框架;
Spring Boot 是基於Spring4的條件註冊的一套快速開發整合包。
Spring Boot:
SpringBoot四大神器之Startergit
Spring Boot中Starter是什麼
好比咱們要在Spring Boot中引入Web MVC的支持時,咱們一般會引入這個模塊spring-boot-starter-web,
而這個模塊若是解壓包出來會發現裏面什麼都沒有,只定義了一些POM依賴。github
通過研究,Starter主要用來簡化依賴用的。好比咱們以前作MVC時要引入日誌組件,那麼須要去找到log4j的版本,而後引入,
如今有了Starter以後,直接用這個以後,log4j就自動引入了,也不用關心版本這些問題。web
較新版的Spring Boot取消了@SpringApplicationConfiguration這個註解,用@SpringBootTest就能夠了面試
一、@SpringBootApplication:Spring Boot項目的核心註解,主要目的是開啓自動配置。;
二、@Configuration:這是一個配置Spring的配置類;
三、@Controller:標明這是一個SpringMVC的Controller控制器;
四、main方法:在main方法中啓動一個應用,即:這個應用的入口;
Spring Boot項目中,啓動的方式有兩種,
一種是直接run Java Application
另一種是經過Spring Boot的Maven插件運行。在Spring Boot項目中推薦使用@ SpringBootConfiguration替代@Configuration
@EnableAutoConfiguration:啓用自動配置,該註解會使Spring Boot根據項目中依賴的jar包自動配置項目的配置項:
@ComponentScan:默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。redis
關閉自動配置
好比:不想自動配置Redis,想手動配置
@SpringBootApplication(exclude={RedisAutoConfiguration.class})
該網站可配置Spring Boot運行字體樣式:http://patorjk.com/software/taag/#p=display&h=3&v=3&f=4Max&t=itcast%20Spring%20Boot 算法
全局配置文件
SpringBoot使用一個全局的配置文件,application.properties或者是application.ymlspring
pom文件的引用
Sprint-boot-starter-securityd
sprint-boot-starter-social-facebook
sprint-boot-starter-social-linkedin
sprint-boot-starter-social-twitter
sprint-boot-starter-test 經常使用的測試框架:Junit,Hamcrest,Mockito,包含Sprint-test模塊
sprint-boot-starter-thymeleaf 對Thymeleaf模板引擎的支持,包含Spring整合的配置 (tomcat-embed-jasper對jsp的支持的依賴)
sprint-boot-starter-velocity 對Velocity模板引擎的支持
spring-boot-starter-freemarker對Freemarker模板引擎的支持
sprint-boot-starter-web 對Web項目開發的支持,包含Tomcat和Spring-MVC
sprint-boot-starter-Tomcat SprintBoot默認的Servlet容器Tomcat,使用外置tomcat時使用:https://blog.csdn.net/wangshuaiwsws95/article/details/80575742#commentBox
sprint-boot-starter-Jetty 使用Jetty做爲Servlet容器,替換Tomcat
sprint-boot-starter-undertow 使用Undertow做爲Servlet容器,替換Tomcat
sprint-boot-starter-logging SprintBoot默認的日誌框架logging
sprint-boot-starter-log4j 支持使用Log4j日誌框架
sprint-boot-starter-websocket 支持WebSocket開發
sprint-boot-starter-ws 支持WebService開發
spring-boot-starter-actuator健康檢查、監控
Xml配置文件
SprintBoot提出0配置XML文件,但在實際項目中可能有一些特殊要求必須使用Xml配置
這時能夠經過Spring提供的@ImportResource來加載Xml配置
例如:@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})
日誌
SpringBoot能夠經過配置來修改默認的日誌的配置:
設置日誌級別:logging.level.org.springframework=DEBUG
格式:logging.level.*=
SprintBoot的自動配置原理
SpringBoot在進行SpringApplication對象實例化時會加載META-INF/spring.factories文件
將該配置文件中的配置載入到Spring容器。
Maven下載源碼
經過dependency:sources該命令能夠下載該項目全部的依賴的包和源碼。
舉例Redis的自動配置
//這是條件註解,當存在配置的類的狀況下,纔會實例化該類
@ConditionalOnClass({JedisConnection.class,RedisOperations.class,Jedis.class})
//Redis的配置類
private final RedisProperties properties
//配置項的前綴
@ConfigurationProperties(prefix="spring.redis")
條件註解
@ConditionalOnBean 當容器裏有指定的Bean的條件下
@ConditionalOnClass 當類路徑下有指定的類的條件下。
@ConditionalOnExpression 基於SpEl表達式做爲判斷條件。
@ConditionalOnJava 基於JVM版本做爲判斷條件
@ConditionalOnJndi 在JNDI存在的條件下查找指定的位置。
@ConditionalOnMissingBean 當容器裏沒有指定Bean的狀況下。
@ConditionalOnMissingClass 當類路徑下沒有指定的類的條件下。
@ConditionalOnNotWebApplication 當前項目不是Web項目的的條件下。
@ConditionalOnProperty 指定的屬性是否有指定的值。
@ConditionalOnResource 類路徑是否有指定的值。
@ConditionalOnSingleCandidate 當指定Bean在容器中只有一個,或者雖然有多個可是指定首選的Bean
@ConditionalOnWebApplication 當前項目是Web項目的條件下。
SpringBoot的Web開發
org.springframework.autoconfigure.web.WebMvcAutoConfiguration:web開發的自動配置類
1.自動配置的ViewResolver
2.自動配置靜態資源
若是進入SpringMVC的規則爲/時,
SpringBoot的默認靜態資源的路徑爲:spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public
將靜態資源放置到webapp下的static目錄中便可經過地址訪問
自定義消息轉化器
只須要在@Configuration的類中添加消息轉化器的@bean加入到spring容器,
就會被SpringBoot自動加入到容器中。
自定義SpringMVC的配置
有時候咱們須要本身配置SpringMVC而不是採用默認,
好比說增長一個攔截器就的繼承WebMvcConfigurerAdapter而後重寫父類中的方法進行擴展
----.13
controlle要和啓動入口main、是同級別目錄
@EnableAutoConfiguration 開啓自動配置 誒內薄凹凸康菲格瑞神
@AutoConfigurationPackage自動配置包
@import 導入自動配置類
將主配置類(@SpringBootApplication標註的類)的所在包 及 下面全部子包裏面的全部組件掃描到Spring容器!!!
部署時:不是生成war包,而是經過Maven Probject中 Deom->Lifecycle->Package運行,jar包生成後在target文件夾
application.yml:修改SpringBoot項目中的默認配置項,如端口、等等
@PropertySource(value = {"classpath:person.properties"}) 加載指定的配置文件、由於yml/properties默認是全局配置
@ImportResource(locations = {"classpath:beans.xml"})導入Spring的配置文件
SprintBoot推薦的 ‘導入Spring的配置文件’ 爲 經過‘全註解配置類’而不是像以前經過<bean></bean>
@Configuration和(@Bean) 指明當前類是配置類,來替代Spring配置文件/替代ImportResource()
配置文件的隨機數和佔位符
SpringBoot默認使用slf4j-api.jar(日誌門面)和logback-core.jar/classic.jar(日誌實現框架:在log4j基礎上升級)
slf4j-api.jar + slf4j-log412.jar + log4j.jar
Web
xxxxAutoConfiguration:幫咱們給容器中自動配置組件
xxxxProperties:配置類來封裝配置文件的內容
xxxxConfigurer:幫助咱們進行擴展配置
@ConditionalOnxxx:通常都是判斷條件、條件註解
@Enablexxx:通常是開啓某項註解支持或服務
SprintBoot對靜態資源的默認設置、:webjars/public/resources/static:首頁、圖標、css/js/img文件。以上都是默認查找位置:通常也可在yml/properties中定義
Thymeleaf使用(森麼萊夫(坦普雷斯)模板引擎解析)
五中表達式:
${}、變量表達式
*{}、選擇變量表達式
#{}、消息文字表達式
@{}、連接url表達式
~{}、片斷表達式
操做:th:insert/th:replace、 jsp:include (與以前JSP對比)
th:each c:forEach
th:if c:if
th:object 聲明變量
th:attr 任意屬性修改
th:value 修改指定屬性默認值
th:text 修改標籤體內容
th:fragment 聲明片斷
th:remove
行內寫法:<div>[[${user}]] / [(${user})]</div>
SprintBoot對SpringMvc的默認配置:
視圖解析器,組合全部的視圖解析器,'咱們能夠本身給"容器"中添加一個視圖解析器,自動的將其組合進來'
靜態首頁
靜態資源文件夾
圖標
自動註冊了'轉換器','格式化器',咱們只須要放在"容器"中便可
本身給容器添加HttpMessageConverter,只須要將本身的組件註冊到"容器"中(@Bean,@Component)
定義錯誤代碼生成規則
@EnableWebMvc:全面接管SpringMVC、SpringBoot的SpringMvc自動配置將所有失效
緣由爲:
//容器中沒有這個組件的時候,這個自動配置類纔會生效
@EnableWebMvc將WebMvcConfigrationSupport組件導入進了
Restfui-crud
區域信息解析器:
設置login.html中英文顯示
連接上的區域信息:點擊連接切換國際化/中英文
登陸
SpringBoot默認配置如不滿意,也可自定義config->配置類更改配置
SpringBoot內置Servlet容器Tomcat不支持JSP,
如需SpringBoot支持JSP須要使用外部Tomcat、war包方式。
服務器爲何能啓動SpringBoot:是因必須繼承'SpringBootServletInitializer'
---.27
SpringBoot的數據訪問:JDBC/Mybatis/SpringDataJPA/Mongdb/redis/...
引入了各類xxxTemplate、xxxRepository,來簡化對數據訪問層的操做
SpringBoot與緩存
緩存註解和概念
Cache 緩存接口
CacheManager 緩存管理器,管理多個Cache,(cacheName/value緩存名字,key緩存使用的key)
@Cacheable 方法可被緩存
@CacheEvict 清空緩存 (如delete時)
@CachePut 更新緩存 (如update時)
@EnableCaching 開啓緩存
keyGenerator 緩存數據時key生成策略 key
serialize 緩存數據時value序列化策略
unless:否認緩存
sync:是否使用異步模式
緩存體驗步驟:
1.引入spring-boot-starter-cache
2.@EnableCaching開啓緩存
3.@Cacheeable(cacheName={"emp"},key="#id",condition="#id>0")
4.@CachePut()
緩存中間件:redis memcached/ehcache
整合redis做爲緩存:
1.引入spring-boot-start-data-redis
2.application.yml配置Redis鏈接地址
3.使用RestTemplate操做redis (RedisTemplate)
redisTemplate.opsForValue();操做字符串
redisTemplate.opsForHash();操做hash
redisTemplate.opsForList();操做list
redisTemplate.opsForSet();操做set
redisTemplate.opsForZset();操做有序set
4.配置緩存、CacheManagerCustomizers
5.測試使用緩存、切換緩存、CompositeCacheManager
與消息
整合RabbitMQ
1.引入spring-boot-starter-amqp
2.application.xml
3.測試RabbitMQ
AmqpAdmin:管理組件
RabbitTemplate:消息發送處理組件
1.開啓監聽或接受的註解支持:@EnableRabbit(AMQP)、@EnableJms(JMS)
2.監聽或接受:@RabbitListener(AMQP)、@JmsListener(JMS)
核心概念
Message(消息):消息頭和消息體組成。
Publisher(消息生產者):向交換器發送消息。
Exchange(交換器):接受消息生產者發送的消息,
點對點:direct(默認)
發佈訂閱:fanout/topic/headers
Queue(消息隊列):保存消息發送給消費者
Binding(綁定):用於消息隊列和交換器之間的關聯
Connection:網絡鏈接,好比一個TCP
Channel:信道,多路複用鏈接中的一條獨立的雙向數據流通道,複用一條TCP鏈接。
Consumer(消費者):從消息隊列中取消息的客戶端。
Virtual Host(虛擬主機):獨立運行,迷你版RabbitMQ,鏈接RabbitMQ必須鏈接虛擬主機。
Broker:消息代理(服務器)
與檢索
ElasticSearch能夠快速的存儲、搜索和分析好了數據
安裝啓動:
docker run -e ES_JAVA_OPTS="-Xms26m -Xms256m" -d -p 9200:9200 -p 9300:9300 --name ES02 容器DI編號
Elasticsearch:使用JSON數據格式
一個Elasticsearch集羣能夠包含多個索引,相應的每一個索引能夠包含多個類型,
這些不一樣的類型存儲着多個文檔,每一個文檔又有多個屬性
整合ElasticSearch
1.引入Spring-boot-starter-data-elasticsearch
2.安裝Spring-Data對應版本的ElasticSearch
3.application.yml
4.Spring Boot自動配置的:ElasticsearchRepository、ElasticsearchTemplate、Client
5.測試ElasticSearch
與任務
異步任務/定時任務/郵件任務
異步任務:@EnableAysnc、@Aysnc,
定時任務:@EnableScheduling、@Scheduling,
TaskExecutor,TaskScheduler 接口
郵件任務:1.引入Spring-boot-starter-mail
2.SpringBoot自動配置MailSenderAutoConfiguration
3.定義MailProperties內容,配置在application.yml中
4.自動裝配JavaMailSender
5.測試郵件發送
與安全
1.引入spring-boot-starter-security
2.編寫配置SpringSecurity的配置類
3.控制請求的訪問權限
4...
與分佈式
SpringBoot和Zookeeper和Dubbo整合
1.安裝Zookeeper並啓動
2.將服務提供者註冊到註冊中心
1.引入dubbo-spring-boot-starter和zookerpee客戶端工具zkclient
2.application.yml:配置dubbo掃描包和註冊中心地址
3.@Service(duboo的@Service):發佈服務 @Component加入到容器
3.服務消費者
1.引入dubbo-spring-boot-starter和zookerpee客戶端工具zkclient
2.application.yml:配置註冊中心地址
3.@Service(Spring的@Service)@Reference:遠程引用服務,調用提供者中的@Service的方法
4.測試 調用當前消費者中的@Service的方法
與監控管理
提供了生成環境下的應用監控和管理功能,經過HTTP/JMX/SSH協議操做
1.引入Spring-boot-starter-actuator
2.經過http方式訪問監控端點
3.可進行shutdown(Post提交,此端點默認關閉)
監控管理端點:
autoconfig 全部自動配置信息
auditevents 審計時間
beans 全部Bean的信息
configprops 全部配置屬性
dump 線程狀態信息
env 當前環境信息
health 應用健康情況
info 當前應用信息
metrics 應用的各項指標
mappings 應用@RequestMapping映射路徑
shutdown 關閉當前應用
trace 追蹤信息
與部署
熱部署:引入spring-boot-devtools
-----------------------------------------------------------------------------
SpringCloud微服務
無分佈!不開發
知識只有質量,沒有重量
-從面試題開始
什麼是微服務?
微服務之間是如何獨立通信的?
SpringCloud和Dubbo有哪些區別?
Restfui API,RPC遠程固態調用
SpringBoot和SpringCloud,談談你對他們的理解?
什麼是服務熔斷?什麼是服務降級
微服務的優缺點分別是什麼?說下你在項目開發中碰到的坑
你所知道的微服務技術棧有哪些?請舉例一二
eureka和zookeeper均可以提供服務註冊於發現的功能,請說說兩個的區別?
......
-微服務概述
微服務-微服務架構-SpringCloud
耦合度更低,職責更佳明確
單體應用:牽一髮而動全身
提倡將單一應用程序劃分紅一組小的服務,每一個服務運行在本身獨立的進程中。
服務之間相互配合,服務之間採用通訊機制互相溝通(使用HTTP的Restfui API)。
每一個服務都圍繞着具體業務構建,並可以被獨立部署到生產環境。
應儘可能避免統一的,集中式的服務管理機制,對一個服務而言:可根據業務、適合語言、工具對其構建。
能夠有個輕量級的集中式管理來協調這些服務,可使用不一樣語言編寫服務,也可使用不一樣的數據存儲
將傳統的一站式應用,根據業務拆分紅一個一個的服務,完全去耦合。
從技術角度看就是一種小而獨立的處理過程,相似進程觀念,可以自行單獨啓動或銷燬,擁有本身獨立的數據庫,一個業務能夠鏈接一個數據庫、也能夠多個業務鏈接一個服務庫。
微服務架構:
eclipse裏面用maven開發的一個一個獨立的小moudle,具體使用Springboot開發一個小的模塊
一個一個的服務組裝拼接起來,對外提供服務暴露接口
微服務優缺點:
能使用不一樣語言開發,
鬆耦合,易於維護
部署靈活,開發效率高
微服務只是業務邏輯的代碼,不會和HTML,CSS或其餘界面組件混合
開發要處理分佈式系統的複雜性
所服務運維難度、隨着服務的增長、運維的壓力也增大
系統部署依賴、服務間通訊成本
數據一致性、系統集成測試、性能監控......
分佈式微服務技術棧:
微服務條目↓ 落地技術↓
服務開發 SpringBoot Spring SpringMVC
服務配置與管理 Archaius Diamond
服務註冊與發現 Eureka Consul Zookeeper
服務調用 Rest RPC gRPC
服務熔斷器 Hystrix Envoy
負載均衡 Ribbon Nginx
服務接口調用(客戶端工具)Feign
消息隊列 kafka RabbitMQ ActiveMQ
服務配置中心管理 SpringCloudConfig Chef
服務路由(API網關) Zuul
服務監控 Zabbix Nagios Metrics Spectator
全鏈路追蹤 Zipkin Brave Dapper
服務部署 Docker OpenStack Kubernetes
數據流操做開發包 SpringCloud Stream(封裝與Redis,Rabbit,KafKa等發送接收消息)
事件消息總線 SpringCloud Bus
...
Dubbo5年再也不維護、2017年從新維護、使得SpringCloud義軍崛起
就目前而言軟件開發、不管前段和後端、都提倡組件化或模塊化開發方式、應深刻理解組件化和模塊化。
-SpringCloud入門概述
是什麼
SpringCloud分佈式微服務下的一戰式解決方案,是各個落地技術的集合體,俗稱微服務全家桶
SpringCloud和SpringBoot是什麼關係
1.SpringCloud宏觀、SpringBoot微觀關注的以一個一個的微服務。醫院科室舉例依賴關係。
2.SpringCloud關注全局的微服務協調整理治理框架,他將SpringBoot開發的一個個單體微服務整合並管理起來,
爲各個微服務之間提供:配置管理、服務發現、斷路器路由、微代理、事件總線、全局鎖、決策精選、分佈式會話等等集成服務。
3.SpringBoot能夠離開SpringCloud獨立使用,但SpringCloud離不開SpringBoot,屬於依賴關係。
4.SpringBoot專一快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架。
Dubbo與SpringCloud的對比
Dubbo SpringCloud
服務註冊中心 Zookeeper Spring Cloud Netflix Eureka
服務調用方式 RPC Restfui API
服務監控 Dubbo-monitor StringBoot Admin
斷路器 不完善 Spring Cloud Netflix Hystrix
服務網關 無 Spring Cloud Netflix Zuul
分佈式配置 無 Spring Cloud Config (類比Apollo攜程分佈式配置阿波羅(此菠蘿非彼菠蘿百度):http://www.javashuo.com/article/p-kwlchktl-dh.html)
服務鏈路跟蹤 無 Spring Cloud Sleuth
消息總線 無 Spring Cloud Bus
數據流(消息驅動、服務之間消息通訊) 無 Spring Cloud Stream
批量任務 無 Spring Cloud Task
共同抽象層Spring Cloud Commons
統一安全認證安全工具包Spring Cloud Security
共同抽象層Spring Cloud Commons
Spring Cloud分佈式微服務利用redssion實現分佈式鎖
Spring Cloud分佈式微服務事務ByteTCC、LCN
Spring Cloud Zookeeper 用於使用zookeeper方式的服務發現和配置管理。
Spring Cloud CLI 能夠命令行方式快速創建雲組件
Spring Cloud Netflix Turbine 聚合服務器發送事件流數據的一個工具,用來監控集羣下hystrix的metrics狀況
Spring Cloud Netflix Archaius 配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操做、輪詢框架、回調機制等功能
......
Dubbo比如是組裝機,而SpringCloud是一體機
阿里:劉軍
Dubbo以後會積極尋求適配到SpringCloud生態,
好比做爲SpringCloud的二進制通訊方案發揮Dubbo性能優點,
或Dubbo經過模塊化以及對http的支持適配到SpringCloud。
能幹嗎
分佈式版本控制配置
服務註冊與發現
路由
服務到服務的調用
負載均衡配置
斷路器
分佈式消息管理
......
去哪下
SpringCloud官網
怎麼玩
https://springcloud.cc/SpringCloud中文網
SpringCloud國內使用狀況
阿里雲
-Rest微服務構建案例工程模塊
建立項目:MavevObject 後續新建都是Maven Modle(這纔是真正幹活的微服務),這都是分佈式項目的套路
Elicpse調成邏輯視圖
引入lombok建立entity實體類序列化,並使用註解方式替代get、set
-Eureka服務註冊與發現
是什麼
NetFlix在設計Eureka時準守的就是AP原則
Eureka是一個基於REST的服務,只須要使用服務的標識符,就能夠訪問到服務
功能相似於dubbo的註冊中心,如Zookeeper
Eureka採用了C-S的設計架構,Eureka Server做爲服務註冊功能的服務器,是服務註冊中心。
Eureka包含兩個組件,Eureka Server和Eureka Client
三大角色
Eureka Server提供服務註冊和發現
Service Provider服務提供方將自身服務註冊到Eureka,使服務消費方能找到
Service Consumer服務消費方從Eureka獲取註冊服務列表,消費提供方所提供的服務
構建步驟
集羣配置
做爲服務註冊中心,Eureka比Zookeeper好在哪裏?
CAP:C一致性、A可用性、P分區容錯性
ACID:A原子性、C一致性、I獨立性、D持久性
Zookeeper保證(CP)原則 (MongoDb/HBase/Redis)
Eureka保證(AP)原則 (CA原則是MySQL/Oracle/SqlServer)
Eureka自我保護機制
若是在15分鐘內超過服務節點沒有正常的心跳,會認爲出現網絡故障。
不會移除由於長時間沒收到心跳的服務
仍然能夠接受新服務的註冊和查詢請求,但不會被同步到其餘節點上(既保證當前節點依然可用)
當網絡穩定時,當前實例新的註冊信息會被同步到其餘節點中
所以,Eureka能夠很好的對應因網絡故障致使部分節點失去聯繫的狀況,而不會像Zookeeper那樣使整個服務註冊中心癱瘓。
-Ribbon負載均衡(理論懂了、實際操做纔會很輕鬆)
是什麼:
是一套基於Netflix Ribbon的客戶端(服務消費者)、負載均衡工具
咱們也很容易使用Ribbon實現自定義的負載均衡算法
能幹嘛:
LB(負載均衡),在微服務或分佈式集羣中常常用。
dubbo和springcloud均給提供了負載均衡,
分爲:集中式LB和進程內LB
初步配置
Ribbon須要和Eureka整合,因此pom須要引入Eureka
@LoadBalanced:(默認是輪訓算法)//客戶端(服務消費者)、負載均衡工具
負載均衡
Ribbon在工做時分紅兩步
第一步 先選擇 EurekaServer ,它優先選擇在同一個區域內負載較少的server.
第二步 再根據用戶指定的策略,在從server取到的服務註冊列表中選擇一個地址。
其中Ribbon提供了多種策略:好比輪詢、隨機和根據響應時間加權。
總結
Ribbon其實就是一個軟負載均衡的客戶端組件
他能夠和其餘所需請求的客戶端結合使用,和eureka結合只是其中一個實例
核心組件IRule
Ribbon默認提供了7中算法,若是不知足需求能夠自定義算法;
IRule:根據特定算法中從服務列表中選取一個要訪問的服務
RoundRobinRule輪詢
RandomRule隨機
AvailabilityFilteringRule
WeightedResponseTimeRule
...
自定義(技術含量高:github改動源碼)
//在啓動該微服務的時候就去加載咱們的自定義Ribbon配置,是配置生效
@RibbonClient(name="MICROSERVICECLOUD_DEPT",configuration=MySelfRule.class)
注意配置細節,建立的MySelfRule文件不能放在主啓動類同包下
定義條件輪詢每次調用5次
-Feign負載均衡
是什麼
Feign是一個聲明式WebService客戶端,也支持可插拔式的編碼器和解碼器,
Fegign是一個聲明式的Web服務客戶端,使得編寫Web服務客戶端變得很是容易
SpringCloud對Feign進行封裝,使其支持SpringMVC註解和HttpMessageConverters
Feign能夠與Eureka和Ribbon組合使用以支持負載均衡
只須要建立一個藉口,而後在上面添加註解便可
Feign面向接口調用服務,而另外一種仍是RestTemplate調用方式
Feign集成了Ribbon
利用Ribbon維護了MicroServiceCloud-Dept的服務列表信息,
並經過輪詢實現客戶端的負載均衡,而與Ribbon不一樣的是,經過feign只須要定義服務綁定接口以聲明式的方法更簡潔的實現了服務調用
-Hystrix熔斷器/斷路器(相似保險絲、微服務系統保護機制)
服務雪崩,多個微服務之間調用的時候,若是扇出的鏈路上某個微服務調用時間過長或不可用
用於對故障延遲和容錯進行隔離和管理,以便單個依賴關係失敗,不會影響整個應用程序。
是什麼
Hystrix是一個用於處理分佈式系統的延遲和容錯的開源庫,
分佈式系統中,許多依賴會不可避免的調用失敗,如超時或異常,
Hystrix可以保證在一個依賴出問題的狀況下,不會致使整個服務失敗,避免級聯故障,以提升分佈式系統彈性
「斷路器」自己是一種開關裝置,當某個服務單元發生故障後,經過斷路器的故障監控,
"向調用方返回一個符合預期的、可處理的備選響應(FallBack),而不是長時間的等待或者拋出調用方沒法處理的異常,"
這樣就保證了服務調用方的線程不會被長時間的佔用,使其避免系統故障、雪崩。
服務熔斷
當某個微服務調用故障或延遲時,會進行服務降級,"進而熔斷該節點服務的調用,快速返回錯誤的響應信息"。
Hytrix會監控微服務間的調用狀況,當失敗的調用到一閾值,缺省是5秒內20次調用失敗就會啓動熔斷機制,
熔斷機制的註解是@HystrixCommand。
熔斷是在服務提供方,保障服務安全
@HystrixCommand(fallbackMethod="processHystrix_Get")報異常後如何處理
public Dept processHystrix_Get(@PathVariable("id") Long id){
return new Dept().setDepton(id).setDname("該ID:"+id+"沒有對應信息,null-@HystrixCommand")
.setDb_source("no this database in Mysql");
}
@EnableCircuitBreaker//對熔斷器的支持
服務降級
面向AOP切面、解耦、避免熔斷時方法多致使膨脹,直接編寫類實現接口
總體資源快不夠了,忍痛將某些服務先關掉,帶渡過難關,再開啓回來。
服務降級是在客戶端也就是服務消費方
@HystrixCommand(fallbackMethod="processHystrix_Get")業務和異常解耦、不在一塊
直接對接口實現Hystrix,而不在Controller中添加那麼多異常方法
DpetClientServer接口在註解@FeignClient中添加fallbackFactory屬性值
總結:服務熔斷:通常是服務故障或異常引發,當某個異常條件被處罰,直接熔斷整個服務,而不是一直等到服務超時。
服務降級:通常是從總體負荷烤爐,就是某個服務熔斷後,服務將再也不被調用,
此時客戶端能夠本身準備一個本地fallback回調,返回一個缺省值。
服務監控hystrixDashboard(中文:黑絲錘斯 得是薄得)
Hystrix提供了「準實時的調用監控ystrixDashboard」可視化監控展現的組件,記錄請求信息、
hystrixDashboard是在客戶端:監控服務端的Hystrix
-zuul路由網關(組務)
是什麼
Zuul包含請求的路由和過濾兩個主要功能。
路由是實現外部訪問的統一入口,將請求轉發到具體的微服務上。
過濾器功能負責對請求效驗、服務聚合等。
Zuul和Eureka進行整合,將Zuul自身註冊爲Eureka服務治理下的應用,也就之後的訪問微服務都是經過Zuul跳轉後得到。
Zuul服務最終仍是會註冊金Eureka
路由基本配置
參考腦圖!
路由訪問映射規則
-SpringCloud Config分佈式配置中心
問題
一套集中式的、動態的配置管理、SpringCloud提供了ConfigServer
每個微服務本身帶着一個application.yml,上百個配置文件的管理o(╥﹏╥)o。。。
是什麼
(ConfigServer/ConfigClient)
服務端:也稱爲分佈式配置中心,"他是一個獨立的微服務應用",
用來鏈接配置服務器併爲客戶端提供獲取配置信息,加密/解密信息,等訪問接口。
客戶端:指定配置中心來管理應用資源,以及與業務相關的配置內容,
能夠經過"Git客戶端工具"來管理訪問配置內容。
等幹嗎
集中管理配置文件
不一樣環境不一樣配置,動態化的配置更新,分環境部署
.....
.....
將配置信息以Rest接口的形式暴露
SpringCloud Config默認使用Git來存儲配置文件,並且使用http/https訪問形式。
SpringCloud Config服務端配置與Github通訊
本地建立yml文件git客戶端推送到github
configServer微服務遠程鏈接到github的yml文件
SpringCloud Config服務端配置與測試
客戶端經過服務端從GitHub中拿數據
@Configtration
-總結
將經驗、總結、傳授、講課通俗易懂、授課引導思路
--------------------------------------------------
Spring Cloud Alibaba生態及框架核心組件做用:
服務註冊與發現+配置管理-Nacos (比如Consul/Eureks/zookeeper),實際生產場景通常爲:爲防止註冊中心頻繁被請求而宕機,微服務會建立定時任務和建立本地緩存,
負載均衡-Ribbon
聲明式HTTP客戶端-Feign
服務容錯/熔斷-Sentinel (比如Hystrix)
消息中間件-RocketMQ:服務之間經過異步消息通訊實現,(比如Stream)
API網關-Gateway
調用鏈監控(服務鏈路跟蹤)-Sleuth/Zipkin
分佈式事務-Seata
SpringCloud和SpringCloud Alibaba經常使用子項目
Spring Cloud提供查詢''服務註冊中心註冊的全部實例信息''的接口 priavte DiscoveryClient discoveryClient;
經常使用有getInstances(name)查詢指定微服務的信息/getServices()查詢註冊了那些微服務