SpringCloud中文網(wǎng)
SpringCloud文檔
https://springcloud.cc/spring-cloud-netflix.html
https://springcloud.cc/spring-cloud-dalston.html
SpringCloud vs Dubbo
SpringCloud與Dubbo是現(xiàn)在最流行的分布式龍頭老大,但是在技術(shù)選型的時(shí)候二者只能選其一。那么看一些blog和聽(tīng)網(wǎng)上談?wù)?,還是SpringCloud應(yīng)用更廣。
原因據(jù)說(shuō)有幾種:
- SpringCloud是微服務(wù)架構(gòu),而Dubbo只不過(guò)是微服務(wù)框架
- SpringCloud自身提供了關(guān)于微服務(wù)的技術(shù),Dubbo與之相比遠(yuǎn)遠(yuǎn)不足
- SpringCloud社區(qū)火熱,能在遇到問(wèn)題的時(shí)候得到社區(qū)小伙伴的幫助,也有更多的資料可以供開(kāi)發(fā)參考,而據(jù)說(shuō)Dubbo因?yàn)槎喾N原因在12年停止了對(duì)Dubbo項(xiàng)目的維護(hù),而在最近SpringCloud變得火熱的時(shí)候,才重新開(kāi)啟了對(duì)Dubbo的維護(hù)支持,勢(shì)要與Cloud分杯羹。
主要不同:SpringCloud基于REST,Dubbo基于RPC(遠(yuǎn)程過(guò)程調(diào)用)
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)包含了很多支持的微服務(wù)的功能,比如說(shuō)SpringCloud可以說(shuō)是微服務(wù)架構(gòu)。有人這樣舉栗子,買(mǎi)電腦,說(shuō)是SpringCloud像是一臺(tái)完整的機(jī)器,而Dubbo可以自由拼裝,組合。SpringCloud自身實(shí)現(xiàn)了很多微服務(wù)的技術(shù)點(diǎn),不需要依賴第三方。
SpringCloud
- Spring Cloud Config - 配置管理
- Spring Cloud Bus - 事件,消息總線
- Eureka - 服務(wù)發(fā)現(xiàn)
- Hystrix - 熔斷器
- zuul - 路由監(jiān)控
- Ribbon - 負(fù)載均衡
項(xiàng)目地址
https://github.com/Inverseli/SpringBoot-Learning/tree/master/microservicecloud
project

父項(xiàng)目和兩個(gè)子模塊
(未完 。。。)
項(xiàng)目結(jié)構(gòu)

父項(xiàng)目和四個(gè)模塊
- microservicecloud - 父工程
- microservicecloud-api - 通用api
- microservicecloud-consumer-dept - 服務(wù)消費(fèi)者
- microservicecloud-eureka - 服務(wù)注冊(cè)中心
- microservicecloud-provider-dept - 服務(wù)提供方
note
maven中父pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
dependencyManagement元素,通過(guò)它元素來(lái)管理jar包的版本,讓子項(xiàng)目中引用一個(gè)依賴而不用顯示的列出版本號(hào)。Maven會(huì)沿著父子層次向上走,直到找到一個(gè)擁有dependencyManagement元素的項(xiàng)目,然后它就會(huì)使用在這個(gè)dependencyManagement元素中指定的版本號(hào)。

寫(xiě)這個(gè)項(xiàng)目的時(shí)候,出問(wèn)題最多的還是版本問(wèn)題,一定要了解版本之間的兼容問(wèn)題,不一定出現(xiàn)版本問(wèn)題的時(shí)候就非得降低版本去適應(yīng),一個(gè)框架會(huì)去解決這些問(wèn)題的,只是說(shuō)你可能沒(méi)在官方文檔中找到,可以在官方推薦的簡(jiǎn)單開(kāi)始項(xiàng)目的例子中找找看,它依賴的是什么版本。遇到問(wèn)題先不要著急解決,看看問(wèn)題出在什么地方,看看給定的錯(cuò)誤提示
Eureka的自我保護(hù)機(jī)制

這是正常的時(shí)候

這是自我保護(hù)的提示
當(dāng)一個(gè)服務(wù)因?yàn)榫W(wǎng)絡(luò)延遲,而沒(méi)有被發(fā)現(xiàn)的時(shí)候,eureka不會(huì)馬上刪除微服務(wù),而是會(huì)保存服務(wù)信息。
它不會(huì)從注冊(cè)列表中剔除因長(zhǎng)時(shí)間沒(méi)收到心跳導(dǎo)致租期過(guò)期的服務(wù),而是等待修復(fù),直到心跳恢復(fù)正常之后,它自動(dòng)退出自我保護(hù)模式。這種模式旨在避免因網(wǎng)絡(luò)分區(qū)故障導(dǎo)致服務(wù)不可用的問(wèn)題
(未完。。。。)