微服務環境搭建SpringCloud
1.什么是單體應用:
單體應用項目中的資源都在一個應用中,打包成一個war包,用一個tomcat啟動的服務就是單體應用
單體應用的好處:
(1)小的項目性能比微服務的性能高
(2)集成快,適合數據量小的項目,比如內部自己用的項目
單體應用的壞處:
(1)一個模塊掛了,整個項目都受影響
(2)單個tomcat更能處理的並發有限,可以做集群,但是不方便局部(某一個模塊)擴展
(3)維護/開發/升級比較麻煩
(4)代碼臃腫,編譯,打包都比較慢
(5)技術選型單一
(6)數據庫選型單一
2.什么是微服務:
微服務就是把一個大的系統拆分成多個小的服務,每個服務只專注自己的一個業務,每個服務有各自的進程
微服務之間使用的網絡通信協議進行數據交換的(通常是基於HTTP的RESTful API)
3.微服務的遠程調用方式:
1.RPC
(1).Remote Produce Call遠程過程調用,類似的還有RMI。自定義數據格式,基於原生TCP通信,速度快,效率高。早期的webservice,現在熱門的dubbo,都是RPC的典型
2.Http
(1).Http:http其實是一種網絡傳輸協議,基於TCP,規定了數據傳輸的格式。現在客戶端瀏覽器與服務端通信基本都是采用Http協議。也可以用來進行遠程服務調用。缺點是消息封裝臃腫。
現在熱門的Rest風格,就可以通過http協議來實現
4.認識RPC
RPC,即 Remote Procedure Call(遠程過程調用),是一個計算機通信協議。 該協議允許運行於一台計算機的程序調用另一台計算機的子程序,而程序員無需額外地為這個交互作用編程。說得通俗一點就是:A計算機提供一個服務,B計算機可以像調用本地服務那樣調用A計算機的服務。
5.RPC調用流程圖
6.認識Http
Http協議:超文本傳輸協議,是一種應用層協議。規定了網絡傳輸的請求格式、響應格式、資源定位和操作的方式等。但是底層采用什么網絡傳輸協議,並沒有規定,不過現在都是采用TCP協議作為底層傳輸協議。說到這里,大家可能覺得,Http與RPC的遠程調用非常像,都是按照某種規定好的數據格式進行網絡通信,有請求,有響應。沒錯,在這點來看,兩者非常相似,但是還是有一些細微差別。
- RPC並沒有規定數據傳輸格式,這個格式可以任意指定,不同的RPC協議,數據格式不一定相同。
- Http中還定義了資源定位的路徑,RPC中並不需要
7.單體應用和微服務的比較圖
8.微服務的特點
-
-
技術選型多樣化
-
每個微服務專注一個業務
-
每個維護有自己的進程
-
微服務之間通過網絡協議進行通信
-
方便做局部拓展
-
開發/維護/升級更方便
9.微服務的缺點
-
-
技術要求比較高
-
部署麻煩
10Springcloud入門環境的搭建
1.搭建注冊中心
//創建多模塊maven工程 springcloud-parent springcloud-eureka-server-1000 //注冊中心EurekaServer springcloud-order-server-3000 //訂單服務EurekaClient ,消費者 springcloud-user-server-2000 //用戶服務EurekaClient ,提供者
2.父工程導入依賴
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent> <groupId>cn.itsource</groupId> <artifactId>dpringcloudday1</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>springcloud-eureka-server-1000</module> <module>springcloud-user-server-2000</module> <module>springcloud-order-server-3000</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies>
3.創建子工程
4.這個子公共就是注冊中心創建Springboot配置類
package cn.itsource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer//開啟注冊中心 @SpringBootApplication public class EurekaServerApplication1000 { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication1000.class,args); } }
5.yml類的配置
server: port: 1000 eureka: instance: hostname: localhost client: registerWithEureka: false //registerWithEureka是關閉注冊服務默認為true因為這個 fetchRegistry: false serviceUrl: defaultZone: http://localhost:1000/eureka/
6.User用戶模塊加入
package cn.itsource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //配置類 @SpringBootApplication public class UserServerApplication2000 { public static void main(String[] args) { SpringApplication.run(UserServerApplication2000.class); } }
yml配置:
eureka: client: serviceUrl: defaultZone: http://localhost:1000/eureka/ #注冊中心地址 server: port: 2000
7.先啟動注冊模塊 端口名為1000然后訪問過后再啟動其他的子模塊
這里表示你有在這個注冊頁面有多少個實例模塊