Springboot項目,SpringBoot-SpringCloud

 2023-10-15 阅读 38 评论 0

摘要:----------------------------------------------------------------------------- spring boot 1.我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基礎框架組合起來, 提供默認的配置,然后提供可插拔的設計,就是各種 starter &#

-----------------------------------------------------------------------------

spring boot 1.我理解就是把 spring spring mvc spring data jpa 等等的一些常用的常用的基礎框架組合起來,
提供默認的配置,然后提供可插拔的設計,就是各種 starter ,來方便開發者使用這一系列的技術。

Springboot項目, 2.以前需要關注版本兼容和一堆配置整合文件,
現在可以先不關心如何配置,可以快速的啟動開發,進行業務邏輯編寫,
各種需要的技術,加入 starter 就配置好了,直接使用,可以說追求開箱即用的效果吧。

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四大神器之Starter

Spring Boot中Starter是什么
比如我們要在Spring Boot中引入Web MVC的支持時,我們通常會引入這個模塊spring-boot-starter-web,
而這個模塊如果解壓包出來會發現里面什么都沒有,只定義了一些POM依賴。

Spring boot?經過研究,Starter主要用來簡化依賴用的。比如我們之前做MVC時要引入日志組件,那么需要去找到log4j的版本,然后引入,
現在有了Starter之后,直接用這個之后,log4j就自動引入了,也不用關心版本這些問題。

?

較新版的Spring Boot取消了@SpringApplicationConfiguration這個注解,用@SpringBootTest就可以了

SpringCloud?1、@SpringBootApplication:Spring Boot項目的核心注解,主要目的是開啟自動配置。;
2、@Configuration:這是一個配置Spring的配置類;
3、@Controller:標明這是一個SpringMVC的Controller控制器;
4、main方法:在main方法中啟動一個應用,即:這個應用的入口;
Spring Boot項目中,啟動的方式有兩種,
一種是直接run Java Application
另外一種是通過Spring Boot的Maven插件運行。在Spring Boot項目中推薦使用@ SpringBootConfiguration替代@Configuration
@EnableAutoConfiguration:啟用自動配置,該注解會使Spring Boot根據項目中依賴的jar包自動配置項目的配置項:
@ComponentScan:默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。

關閉自動配置
比如:不想自動配置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.yml

Springboot教程。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整合的配置
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
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開發


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
服務跟蹤 無 Spring Cloud Sleuth
消息總線 無 Spring Cloud Bus
數據流 無 Spring Cloud Stream
批量任務 無 Spring Cloud Task
......
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

?

-總結


將經驗、總結、傳授、講課通俗易懂、授課引導思路

?

轉載于:https://www.cnblogs.com/Bkxk/p/9371729.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/145252.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息