目錄
- 微服務架構與springcloud
- 架構演變
- 為什么使用微服務
- 微服務的通訊方式
- 架構的選擇
- springcloud概述
- 場景模擬之基礎架構的搭建
- 模擬微服務之間的服務調用
- 目前遠程調用的問題
- eureka
- 注冊中心的作用
- 注冊中心的實現
- 服務提供者注冊到注冊中心
springcloud基于springboot
微服務架構與springcloud
架構演變
1.一個單體項目
缺點:大型項目文件太多體積太大,維護難,編譯難,測試難,一個tomcat不夠用
2.集群部署單體項目(多做幾個,做的都是同樣的事情)
只能解決上述第4個問題,前三個問題更復雜,如改代碼要同步改整個集群
新出現問題:不是所有功能用的人都很多,不同的功能需要集群的數量不一致
3.根據功能把項目分開,把單獨的模塊拆成項目
可以解決不同功能需要集群數量不一致的問題和剩下的前3個問題
新出現問題:服務之間的通信,jar之間的相互依賴
4.最后用上springcloud管理微服務
為什么使用微服務
一個項目/系統中各個模塊的壓力
壓力大的模塊做集群分擔壓力
其他見文檔2.1.1,2.1.2,2.2.1,2.2.2
微服務的通訊方式
見文檔2.2.3
架構的選擇
見文檔2.3
微服務是一種思想,是一種架構模式
springcloud是微服務的一種落地方案
見文檔2.4
springcloud主要用來解決微服務之間通信的一系列問題
springcloud概述
見文檔3
場景模擬之基礎架構的搭建
不同的項目不同的端口
建立一個公共項目用來存放其他項目共同用到的類,然后給其他項目依賴,如user-common中的domain,query,user等
新建maven項目D082-springcloud-parent,tips:不要用下劃線
刪除src
新建maven模塊user-common
新建maven模塊user-provider-4010
新建maven模塊user-consumer-5010
user-common的pom中引入lombok,刷新依賴,建立User類
生產者和消費者兩個項目的pom中各自引入user-common,刷新依賴,新建UserController,使用依賴過來的User類
模擬微服務之間的服務調用
tips:隱藏不需要關心的.idea和.iml文件
設置 - 編輯器 - 文件類型 - 忽略文件和文件夾中追加* .idea;* .iml;
父級pom引入相關依賴
生產者和消費者兩個項目的pom中各自引入web和test依賴,新建application.yml,配置端口,新建啟動類
改造生產者的UserController,
啟動生產者項目,瀏覽器訪問:http://localhost:4010/user/provider/1
消費者中新建config.HttpUtils,把RestTemplate交給容器管理
新建UserController,
啟動生產者和消費者兩個項目,瀏覽器訪問:http://localhost:5010/user/consumer/2
目前遠程調用的問題
如消費者URL中的ip目前是localhost,上線后會變化
上線后如果提供者機器掛了重開一臺機器,消費者記的還是以前的provider的地址
消費者不知道提供者機器的狀態,是否健康,是否掛了
提供者只有一臺機器,掛了就都沒了
這種模式進行提供者集群后,消費者難以實現負載均衡
負責均衡:實時知道集群中有多少機器,哪些機器可用,哪些機器不可用,不給不可用機器發請求
eureka
注冊中心的作用
見文檔5.1
注冊中心的實現
springcloud是基于springboot的,所以選擇版本要對應
新建工程eureka-server-1010
導入相關依賴
<!--springboot支持-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
</dependency><!--Eureka服務端支持-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
新建application.yml,配置參數
server:port: 1010
eureka:instance:hostname: localhostclient:registerWithEureka: false #是否要注冊到eurekafetchRegistry: false #表示是否從Eureka Server獲取注冊信息serviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #單機配置
新建啟動類EurekaApp
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {public static void main(String[] args) {SpringApplication.run(EurekaApp.class);}
}
啟動項目,瀏覽器訪問:http://localhost:1010
服務提供者注冊到注冊中心
生產者項目引入euraka-client依賴
<!--eureka客戶端支持 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
application.yml加入相關參數
server:port: 4010
spring:application:name: user-provider
eureka:client:service-url:defaultZone: http://localhost:1010/eureka
啟動類加入euraka客戶端注解
@SpringBootApplication
@EnableEurekaClient //表示是eureka的客戶端
public class App {public static void main(String[] args) {SpringApplication.run(App.class,args);}
}
瀏覽器訪問:http://localhost:1010,可看到注冊進來的 USER-PROVIDER