javascript
Spring Cloud 第一天课堂笔记
1. 系統架構演變概述
目標:了解項目架構的演變歷程
小結:
#mermaid-svg-jDcYEZKjHiRrxSmv .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .label text{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .node rect,#mermaid-svg-jDcYEZKjHiRrxSmv .node circle,#mermaid-svg-jDcYEZKjHiRrxSmv .node ellipse,#mermaid-svg-jDcYEZKjHiRrxSmv .node polygon,#mermaid-svg-jDcYEZKjHiRrxSmv .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-jDcYEZKjHiRrxSmv .node .label{text-align:center;fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .node.clickable{cursor:pointer}#mermaid-svg-jDcYEZKjHiRrxSmv .arrowheadPath{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-jDcYEZKjHiRrxSmv .flowchart-link{stroke:#333;fill:none}#mermaid-svg-jDcYEZKjHiRrxSmv .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-jDcYEZKjHiRrxSmv .edgeLabel rect{opacity:0.9}#mermaid-svg-jDcYEZKjHiRrxSmv .edgeLabel span{color:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-jDcYEZKjHiRrxSmv .cluster text{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-jDcYEZKjHiRrxSmv .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-jDcYEZKjHiRrxSmv text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-jDcYEZKjHiRrxSmv .actor-line{stroke:grey}#mermaid-svg-jDcYEZKjHiRrxSmv .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-jDcYEZKjHiRrxSmv #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .sequenceNumber{fill:#fff}#mermaid-svg-jDcYEZKjHiRrxSmv #sequencenumber{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv #crosshead path{fill:#333;stroke:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .messageText{fill:#333;stroke:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-jDcYEZKjHiRrxSmv .labelText,#mermaid-svg-jDcYEZKjHiRrxSmv .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-jDcYEZKjHiRrxSmv .loopText,#mermaid-svg-jDcYEZKjHiRrxSmv .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-jDcYEZKjHiRrxSmv .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-jDcYEZKjHiRrxSmv .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-jDcYEZKjHiRrxSmv .noteText,#mermaid-svg-jDcYEZKjHiRrxSmv .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-jDcYEZKjHiRrxSmv .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-jDcYEZKjHiRrxSmv .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-jDcYEZKjHiRrxSmv .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-jDcYEZKjHiRrxSmv .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .section{stroke:none;opacity:0.2}#mermaid-svg-jDcYEZKjHiRrxSmv .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-jDcYEZKjHiRrxSmv .section2{fill:#fff400}#mermaid-svg-jDcYEZKjHiRrxSmv .section1,#mermaid-svg-jDcYEZKjHiRrxSmv .section3{fill:#fff;opacity:0.2}#mermaid-svg-jDcYEZKjHiRrxSmv .sectionTitle0{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .sectionTitle1{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .sectionTitle2{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .sectionTitle3{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-jDcYEZKjHiRrxSmv .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .grid path{stroke-width:0}#mermaid-svg-jDcYEZKjHiRrxSmv .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-jDcYEZKjHiRrxSmv .task{stroke-width:2}#mermaid-svg-jDcYEZKjHiRrxSmv .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .taskText:not([font-size]){font-size:11px}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-jDcYEZKjHiRrxSmv .task.clickable{cursor:pointer}#mermaid-svg-jDcYEZKjHiRrxSmv .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-jDcYEZKjHiRrxSmv .taskText0,#mermaid-svg-jDcYEZKjHiRrxSmv .taskText1,#mermaid-svg-jDcYEZKjHiRrxSmv .taskText2,#mermaid-svg-jDcYEZKjHiRrxSmv .taskText3{fill:#fff}#mermaid-svg-jDcYEZKjHiRrxSmv .task0,#mermaid-svg-jDcYEZKjHiRrxSmv .task1,#mermaid-svg-jDcYEZKjHiRrxSmv .task2,#mermaid-svg-jDcYEZKjHiRrxSmv .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutside0,#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutside2{fill:#000}#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutside1,#mermaid-svg-jDcYEZKjHiRrxSmv .taskTextOutside3{fill:#000}#mermaid-svg-jDcYEZKjHiRrxSmv .active0,#mermaid-svg-jDcYEZKjHiRrxSmv .active1,#mermaid-svg-jDcYEZKjHiRrxSmv .active2,#mermaid-svg-jDcYEZKjHiRrxSmv .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-jDcYEZKjHiRrxSmv .activeText0,#mermaid-svg-jDcYEZKjHiRrxSmv .activeText1,#mermaid-svg-jDcYEZKjHiRrxSmv .activeText2,#mermaid-svg-jDcYEZKjHiRrxSmv .activeText3{fill:#000 !important}#mermaid-svg-jDcYEZKjHiRrxSmv .done0,#mermaid-svg-jDcYEZKjHiRrxSmv .done1,#mermaid-svg-jDcYEZKjHiRrxSmv .done2,#mermaid-svg-jDcYEZKjHiRrxSmv .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-jDcYEZKjHiRrxSmv .doneText0,#mermaid-svg-jDcYEZKjHiRrxSmv .doneText1,#mermaid-svg-jDcYEZKjHiRrxSmv .doneText2,#mermaid-svg-jDcYEZKjHiRrxSmv .doneText3{fill:#000 !important}#mermaid-svg-jDcYEZKjHiRrxSmv .crit0,#mermaid-svg-jDcYEZKjHiRrxSmv .crit1,#mermaid-svg-jDcYEZKjHiRrxSmv .crit2,#mermaid-svg-jDcYEZKjHiRrxSmv .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-jDcYEZKjHiRrxSmv .activeCrit0,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCrit1,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCrit2,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-jDcYEZKjHiRrxSmv .doneCrit0,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCrit1,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCrit2,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-jDcYEZKjHiRrxSmv .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-jDcYEZKjHiRrxSmv .milestoneText{font-style:italic}#mermaid-svg-jDcYEZKjHiRrxSmv .doneCritText0,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCritText1,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCritText2,#mermaid-svg-jDcYEZKjHiRrxSmv .doneCritText3{fill:#000 !important}#mermaid-svg-jDcYEZKjHiRrxSmv .activeCritText0,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCritText1,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCritText2,#mermaid-svg-jDcYEZKjHiRrxSmv .activeCritText3{fill:#000 !important}#mermaid-svg-jDcYEZKjHiRrxSmv .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-jDcYEZKjHiRrxSmv g.classGroup text .title{font-weight:bolder}#mermaid-svg-jDcYEZKjHiRrxSmv g.clickable{cursor:pointer}#mermaid-svg-jDcYEZKjHiRrxSmv g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-jDcYEZKjHiRrxSmv g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-jDcYEZKjHiRrxSmv .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-jDcYEZKjHiRrxSmv .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-jDcYEZKjHiRrxSmv .dashed-line{stroke-dasharray:3}#mermaid-svg-jDcYEZKjHiRrxSmv #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv .commit-id,#mermaid-svg-jDcYEZKjHiRrxSmv .commit-msg,#mermaid-svg-jDcYEZKjHiRrxSmv .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-jDcYEZKjHiRrxSmv g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-jDcYEZKjHiRrxSmv g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-jDcYEZKjHiRrxSmv g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-jDcYEZKjHiRrxSmv .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-jDcYEZKjHiRrxSmv .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-jDcYEZKjHiRrxSmv .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-jDcYEZKjHiRrxSmv .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-jDcYEZKjHiRrxSmv .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-jDcYEZKjHiRrxSmv .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-jDcYEZKjHiRrxSmv .edgeLabel text{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-jDcYEZKjHiRrxSmv .node circle.state-start{fill:black;stroke:black}#mermaid-svg-jDcYEZKjHiRrxSmv .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-jDcYEZKjHiRrxSmv #statediagram-barbEnd{fill:#9370db}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-state .divider{stroke:#9370db}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-jDcYEZKjHiRrxSmv .note-edge{stroke-dasharray:5}#mermaid-svg-jDcYEZKjHiRrxSmv .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-jDcYEZKjHiRrxSmv .error-icon{fill:#522}#mermaid-svg-jDcYEZKjHiRrxSmv .error-text{fill:#522;stroke:#522}#mermaid-svg-jDcYEZKjHiRrxSmv .edge-thickness-normal{stroke-width:2px}#mermaid-svg-jDcYEZKjHiRrxSmv .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-jDcYEZKjHiRrxSmv .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-jDcYEZKjHiRrxSmv .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-jDcYEZKjHiRrxSmv .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-jDcYEZKjHiRrxSmv .marker{fill:#333}#mermaid-svg-jDcYEZKjHiRrxSmv .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-jDcYEZKjHiRrxSmv {color: rgba(0, 0, 0, 0.75);font: ;}集中式架構垂直拆分分布式服務SOA面向服務架構微服務架構2. 微服務架構說明
目標:了解SOA與微服務架構的區別以及說出微服務架構的特點
分析:
SOA使用了ESB組件的面向服務架構:ESB自身實現復雜;應用服務粒度較大,所有服務之間的通信都經過ESB會降低通信速度;部署、測試ESB比較麻煩。
小結:
微服務架構:是一套使用小服務或者單一業務來開發單個應用的方式或途徑。
微服務架構特點:
- 單一職責
- 服務粒度小
- 面向服務(對外暴露REST api)
- 服務之間相互獨立
與使用ESB的SOA架構的區別:微服務架構沒有使用ESB,有服務治理注冊中心;業務粒度小。
3. 服務調用方式說明
目標:能夠說出服務調用方式種類
小結:
- RPC:基于socket,速度快,效率高;webservice、dubbo
- HTTP:基于TCP,封裝比較臃腫;對服務和調用方沒有任何技術、語言的限定,自由靈活;RESTful,Spring Cloud
4. Spring RestTemplate示例工程導入
目標:了解Spring RestTemplate的應用
分析:
一般情況下有如下三種http客戶端工具類包都可以方便的進行http服務調用:
- httpClient
- okHttp
- JDK原生URLConnection
spring 提供了RestTemplate的工具類對上述的3種http客戶端工具類進行了封裝,可在spring項目中使用RestTemplate進行服務調用。
小結:
@RunWith(SpringRunner.class) @SpringBootTest public class RestTemplateTest {@Autowiredprivate RestTemplate restTemplate;@Testpublic void test(){String url = "http://localhost/user/8";//restTemplate可以對json格式字符串進行反序列化User user = restTemplate.getForObject(url, User.class);System.out.println(user);} }5. Spring Cloud概述
目標:Spring Cloud整合的組件和版本特征
小結:
- 整合的組件可以有很多組件;常見的組件有:eureka注冊中心,Gateway網關,Ribbon負載均衡,Feign服務調用,Hystrix熔斷器。在有需要的時候項目添加對于的啟動器依賴即可。
- 版本特征:以英文單詞命名(倫敦地鐵站名)
6. 創建微服務工程
目標:創建微服務父工程heima-springcloud、用戶服務工程user-service、服務消費工程consumer-demo
分析:
需求:查詢數據庫中的用戶數據并輸出到瀏覽器
- 父工程heima-springcloud:添加spring boot父坐標和管理其它組件的依賴
- 用戶服務工程user-service:整合mybatis查詢數據庫中用戶數據;提供查詢用戶服務
- 服務消費工程consumer-demo:利用查詢用戶服務獲取用戶數據并輸出到瀏覽器
小結:
<!-- springCloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency>通過 scope 的import可以繼承 spring-cloud-dependencies 工程中的依賴
7. 搭建配置user-service工程
目標:配置user-service工程并能夠根據用戶id查詢數據庫中用戶
分析:
需求:可以訪問http://localhost:9091/user/8輸出用戶數據
實現步驟:
小結:
- 添加啟動器依賴
- 編寫配置文件
8. 搭建配置consumer-demo工程
目標:編寫測試類使用restTemplate訪問user-service的路徑根據id查詢用戶
分析:
需求:訪問http://localhost:8080/consumer/8 使用RestTemplate獲取http://localhost:9091/user/8的數據
實現步驟:
小結:
- 服務管理
如何自動注冊和發現
如何實現狀態監管
如何實現動態路由 - 服務如何實現負載均衡
- 服務如何解決容災問題
- 服務如何實現統一配置
上述的問題都可以通過Spring Cloud的各種組件解決。
9. Eureka注冊中心說明
目標:說出Eureka的主要功能
小結:
Eureka的主要功能是進行服務管理,定期檢查服務狀態,返回服務地址列表。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HcNXxKAi-1638370111505)(assets/1560439174201.png)]
10. 搭建eureka-server工程
目標:添加eureka對應依賴和編寫引導類搭建eureka服務并可訪問eureka服務界面
分析:
Eureka是服務注冊中心,只做服務注冊;自身并不提供服務也不消費服務。可以搭建web工程使用Eureka,可以使用Spring Boot方式搭建。
搭建步驟:
小結:
- 啟動器依賴
- 配置文件
11. 服務注冊與發現
目標:將user-service的服務注冊到eureka并在consumer-demo中可以根據服務名稱調用
分析:
- 服務注冊:在服務提供工程user-service上添加Eureka客戶端依賴;自動將服務注冊到EurekaServer服務地址列表。
- 添加依賴;
- 改造啟動引導類;添加開啟Eureka客戶端發現的注解;
- 修改配置文件;設置Eureka 服務地址
- 服務發現:在服務消費工程consumer-demo上添加Eureka客戶端依賴;可以使用工具類根據服務名稱獲取對應的服務地址列表。
- 添加依賴;
- 改造啟動引導類;添加開啟Eureka客戶端發現的注解;
- 修改配置文件;設置Eureka 服務地址;
- 改造處理器類ConsumerController,可以使用工具類DiscoveryClient根據服務名稱獲取對應服務地址列表。
小結:
- 添加Eureka客戶端依賴;
-
添加啟動引導類注解;
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zVyvt9aV-1638370111508)(assets/1560519608668.png)]
-
修改配置
12. Eureka Server高可用配置
目標:可以啟動兩臺eureka-server實例;在eureka管理界面看到兩個實例
分析:
Eureka Server是一個web應用,可以啟動多個實例(配置不同端口)保證Eureka Server的高可用。
小結:
高可用配置:將Eureka Server作為一個服務注冊到其它Eureka Server,這樣多個Eureka Server之間就能夠互相發現對方,同步服務,實現Eureka Server集群。
13. Eureka客戶端與服務端配置
目標:配置eureka客戶端user-service的注冊、續約等配置項,配置eureka客戶端consumer-demo的獲取服務間隔時間;了解失效剔除和自我保護
分析:
- Eureka客戶端工程
- user-service 服務提供
- 服務地址使用ip方式
- 續約
- consumer-demo 服務消費
- 獲取服務地址的頻率
- user-service 服務提供
- Eureka服務端工程 eureka-server
- 失效剔除
- 自我保護
小結:
- user-service
- consumer-demo
- eureka-server
14. 負載均衡Ribbon簡介
目標:描述負載均衡和ribbon的作用
分析:
負載均衡是一個算法,可以通過該算法實現從地址列表中獲取一個地址進行服務調用。
在Spring Cloud中提供了負載均衡器:Ribbon
小結:
Ribbon提供了輪詢、隨機兩種負載均衡算法(默認是輪詢)可以實現從地址列表中使用負載均衡算法獲取地址進行服務調用。
15. Ribbon負載均衡應用
目標:配置啟動兩個用戶服務,在consumer-demo中使用服務名實現根據用戶id獲取用戶
分析:
需求:可以使用RestTemplate訪問http://user-service/user/8獲取服務數據。
可以使用Ribbon負載均衡:在執行RestTemplate發送服務地址請求的時候,使用負載均衡攔截器攔截,根據服務名獲取服務地址列表,使用Ribbon負載均衡算法從服務地址列表中選擇一個服務地址,訪問該地址獲取服務數據。
實現步驟:
小結:
在實例化RestTemplate的時候使用@LoadBalanced,服務地址直接可以使用服務名。
16. 熔斷器Hystrix簡介
目標:了解熔斷器Hystrix的作用
小結:
Hystrix是一個延遲和容錯庫,用于隔離訪問遠程服務,防止出現級聯失敗。
17. 線程隔離&服務降級
目標:了解什么是線程隔離和服務降級
分析:
Hystrix解決雪崩效應:
- 線程隔離:用戶請求不直接訪問服務,而是使用線程池中空閑的線程訪問服務,加速失敗判斷時間。
- 服務降級:及時返回服務調用失敗的結果,讓線程不因為等待服務而阻塞。
小結:
- consumer-demo中添加依賴
-
開啟熔斷
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9l0xLw6S-1638370111510)(assets/1560662674993.png)]
-
降級邏輯
- 修改超時配置
18. 服務熔斷演示
目標:了解熔斷器工作原理
小結:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6kOCtMFW-1638370111514)(assets/1560682028169.png)]
可以通過配置服務熔斷參數修改默認:
hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 2000circuitBreaker:errorThresholdPercentage: 50 # 觸發熔斷錯誤比例閾值,默認值50%sleepWindowInMilliseconds: 10000 # 熔斷后休眠時長,默認值5秒requestVolumeThreshold: 10 # 熔斷觸發最小請求次數,默認值是20 isolation:thread:timeoutInMilliseconds: 2000 ## 18. 服務熔斷演示**目標**:了解熔斷器工作原理**小結**:[外鏈圖片轉存中...(img-6kOCtMFW-1638370111514)]可以通過配置服務熔斷參數修改默認:```yml hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 2000circuitBreaker:errorThresholdPercentage: 50 # 觸發熔斷錯誤比例閾值,默認值50%sleepWindowInMilliseconds: 10000 # 熔斷后休眠時長,默認值5秒requestVolumeThreshold: 10 # 熔斷觸發最小請求次數,默認值是20總結
以上是生活随笔為你收集整理的Spring Cloud 第一天课堂笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python程序设计》教学大纲
- 下一篇: Spring Cloud 第二天课堂笔记