SpringCloud的入門學習

  • 2019 年 11 月 12 日
  • 筆記

SpringCloud—>Spring生態體系的微服務架構:https://spring.io/

官網貼圖,如下所示,介紹了微服務的架構體系(話說,英語好讀官網,可能很爽吧,沒體驗過)。

1、微服務是一種架構風格(微服務架構是區分與單體架構的)。一個大型的複雜軟體應用,由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關注於完成一件任務並很好的完成該任務。

2、常見的架構風格,如是,a、客戶端與服務端、b、基於組件模型的架構(EJB)、c、分層架構(MVC)、d、面向服務架構(SOA)。

3、微服務的特點,如下所是:

  特點一:系統是由多個服務構成。

  特點二、每個服務可以單獨獨立部署。

  特點三、每個服務之間是松耦合的。服務內部是高內聚的,外部是低耦合的。高內聚就是每個服務只關注完成一個功能。

4、微服務的優缺點,如下所示:

  優點:測試容易、可伸縮性強、可靠性強、跨語言程度會更加靈活、團隊協作容易、系統迭代容易。

  缺點:運維成本過高,部署數量較多、介面兼容多版本、分散式系統的複雜性、分散式事務。

5、常見軟體架構方式的區別,包含MVC架構、RPC架構(面向服務架構)、SOA架構(面向服務架構)、微服務架構(面向服務架構)。如下所示:

不同軟體架構的描述,如下所示:

6、什麼是 SpringCloud?

  1)、Spring Cloud是一個服務治理平台,提供了一些服務框架。包含了:服務註冊與發現、配置中心、消息中心 、負載均衡、數據監控等等。

  2)、Spring Cloud是一個微服務框架,相比 Dubbo 等 RPC 框架, Spring Cloud 提供的全套的分散式系統解決方案。

  3)、Spring Cloud對微服務基礎框架 Netflix 的多個開源組件進行了封裝,同時又實現了和雲端平台以及和 Spring Boot 開發框架的集成。

  4)、Spring Cloud為微服務架構開發涉及的配置管理,服務治理,熔斷機制,智慧路由,微代理,控制匯流排,一次性 token,全局一致性鎖,leader 選舉,分散式session,集群狀態管理等操作提供了一種簡單的開發方式。

  5)、Spring Cloud為開發者提供了快速構建分散式系統的工具,開發者可以快速的啟動服務或構建應用、同時能夠快速和雲平台資源進行對接。

  6)、Sping Cloud是Spring 的一個頂級項目與 Spring Boot、Spring Data 位於同一位置。

7、Spring Cloud的子項目。

1)、Spring Cloud Config:配置管理工具,支援使用 Git 存儲配置內容,支援應用配置的外部化存儲,支援客戶端配置資訊刷新、加解密配置內容等。  2)、Spring Cloud Bus:事件、消息匯流排,用於在集群(例如,配置變化事件)中傳播狀態變化,可與 Spring Cloud Config 聯合實現熱部署。  3)、Spring Cloud Netflix:針對多種 Netflix 組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius 等。    a、Netflix Eureka:一個基於 rest 服務的服務治理組件,包括服務註冊中心、服務註冊與服務發現機制的實現,實現了雲端負載均衡和中間層伺服器的故障轉移。    b、Netflix Hystrix:容錯管理工具,實現斷路器模式,通過控制服務的節點, 從而對延遲和故障提供更強大的容錯能力。    c、Netflix Ribbon:客戶端負載均衡的服務調用組件。    d、Netflix Feign:基於 Ribbon 和 Hystrix 的聲明式服務調用組件。    e、Netflix Zuul:微服務網關,提供動態路由,訪問過濾等服務。    f、Netflix Archaius:配置管理 API,包含一系列配置管理 API,提供動態類型化屬性、執行緒安全配置操作、輪詢框架、回調機制等功能。  4)、Spring Cloud for Cloud Foundry:通過 Oauth2協議綁定服務到CloudFoundry,CloudFoundry 是 VMware 推出的開源 PaaS 雲平台。  5)、Spring Cloud Sleuth:日誌收集工具包,封裝了 Dapper,Zipkin 和 HTrace操作。  6)、Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。  7)、Spring Cloud Security:安全工具包,為你的應用程式添加安全控制,主要是指 OAuth2。  8)、Spring Cloud Consul:封裝了 Consul 操作,consul 是一個服務發現與配置工具,與 Docker 容器可以無縫集成。  9)、Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。  10)、Spring Cloud Stream:數據流操作開發包,封裝了與 Redis,Rabbit、Kafka 等發送接收消息。  11)、Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令行方式快速建立雲組件。

8、什麼是服務註冊中心。

  答:服務註冊中心是服務實現服務化管理的核心組件,類似於目錄服務的作用,主要用來存儲服務資訊,譬如提供者 url 串、路由資訊等。服務註冊中心是 SOA 架構中最基礎的設施之一。

9、服務註冊中心的作用。

  答:服務的註冊、服務的發現。

10、常見的註冊中心有哪些。

  答:例如,Dubbo的註冊中心Zookeeper、Sringcloud的註冊中心Eureka。

11、服務註冊中心解決了什麼問題。

  答:服務管理、服務的依賴關係管理。

12、什麼是Eureka註冊中心?

  答:Eureka是Netflix開發的服務發現組件,本身是一個基於 REST 的服務。Spring Cloud 將它集成在其子項目 spring-cloud-netflix 中,以實現Spring Cloud 的服務註冊於發現,同時還提供了負載均衡、故障轉移等能力。

13、Eureka 註冊中心三種角色。

  a、Eureka Server,通過 Register、Get、Renew 等介面提供服務的註冊和發現。   b、Application Service (Service Provider),服務提供方,把自身的服務實例註冊到 Eureka Server中。   c、Application Client (Service Consumer),服務調用方,通過 Eureka Server獲取服務列表,消費服務。

14、Eureka的入門案例介紹與使用,首先創建Eureka Server,通過 Register、Get、Renew 等介面提供服務的註冊和發現。由於使用的是maven構建的springboot項目,所以首先引入pom.xml配置文件,這裡需要注意的是springboot的版本、springcloud的版本對應,不然會出現一個版本不對應錯誤,稍後可以貼一下錯誤。我使用的springboot版本是2.2.0的,springcloud版本是Hoxton.RC1。

 1 <?xml version="1.0" encoding="UTF-8"?>   2 <project xmlns="http://maven.apache.org/POM/4.0.0"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   4     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0   5     https://maven.apache.org/xsd/maven-4.0.0.xsd">   6     <modelVersion>4.0.0</modelVersion>   7     <parent>   8         <groupId>org.springframework.boot</groupId>   9         <artifactId>spring-boot-starter-parent</artifactId>  10         <version>2.2.0.RELEASE</version>  11         <relativePath />  12         <!-- lookup parent from repository -->  13     </parent>  14     <groupId>com.bie</groupId>  15     <artifactId>springcloud-eureka-server</artifactId>  16     <version>0.0.1-SNAPSHOT</version>  17     <name>springcloud-eureka-server</name>  18     <description>Demo project for Spring Boot</description>  19  20     <properties>  21         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  22         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  23         <java.version>1.8</java.version>  24         <spring-cloud.version>Hoxton.RC1</spring-cloud.version>  25         <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>  26     </properties>  27  28     <dependencies>  29         <dependency>  30             <groupId>org.springframework.boot</groupId>  31             <artifactId>spring-boot-starter-web</artifactId>  32         </dependency>  33         <dependency>  34             <groupId>org.springframework.cloud</groupId>  35             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>  36         </dependency>  37  38         <dependency>  39             <groupId>org.springframework.boot</groupId>  40             <artifactId>spring-boot-starter-test</artifactId>  41             <scope>test</scope>  42             <exclusions>  43                 <exclusion>  44                     <groupId>org.junit.vintage</groupId>  45                     <artifactId>junit-vintage-engine</artifactId>  46                 </exclusion>  47             </exclusions>  48         </dependency>  49     </dependencies>  50  51     <dependencyManagement>  52         <dependencies>  53             <dependency>  54                 <groupId>org.springframework.cloud</groupId>  55                 <artifactId>spring-cloud-dependencies</artifactId>  56                 <version>${spring-cloud.version}</version>  57                 <type>pom</type>  58                 <scope>import</scope>  59             </dependency>  60         </dependencies>  61     </dependencyManagement>  62  63     <build>  64         <plugins>  65             <plugin>  66                 <groupId>org.springframework.boot</groupId>  67                 <artifactId>spring-boot-maven-plugin</artifactId>  68             </plugin>  69         </plugins>  70     </build>  71  72     <repositories>  73         <repository>  74             <id>spring-milestones</id>  75             <name>Spring Milestones</name>  76             <url>https://repo.spring.io/milestone</url>  77         </repository>  78     </repositories>  79  80 </project>

如果版本不一致,報錯如下所示:

1 java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V

如果不知道如何,找對應的版本,可以使用spring官網的案例,將pom.xml配置拷貝到你的程式碼裡面即可。

最後找到這個頁面,然後將這個jdk、打包方式、java語言、maven方式、項目名稱、包名稱、依賴包等等選擇好,就可以下載下來,然後將pom.xml裡面的配置拷貝到你的項目裡面即可。

然後配置一下application.properties配置文件。將eureka不註冊到Eureka-server服務中、不從Eureka-server中獲取服務註冊資訊,避免出現錯誤。

 1 # 配置項目名稱   2 spring.application.name=springcloud-eureka-server   3   4 # 配置埠號   5 spring.port=8080   6   7 # 是否將自己註冊到 Eureka-Server 中,默認的為 true   8 eureka.client.registerWithEureka=false   9  10 # 是否從 Eureka-Server 中獲取服務註冊資訊,默認為 true  11 eureka.client.fetchRegistry=false

可以將註冊@EnableEurekaServer添加到主類上面,表示啟動Eureka-server服務端。Eureka提供服務的註冊與發現。

 1 package com.bie;   2   3 import org.springframework.boot.SpringApplication;   4 import org.springframework.boot.autoconfigure.SpringBootApplication;   5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;   6   7 @EnableEurekaServer // 表示啟動的是eureka的server伺服器端   8 @SpringBootApplication   9 public class SpringCloudApplication {  10  11     public static void main(String[] args) {  12         SpringApplication.run(SpringCloudApplication.class, args);  13     }  14  15 }

啟動主類以後,如果正常啟動可以在瀏覽器查看到頁面資訊,Eureka提供的管理介面,通過管理介面可以看到註冊到Eureka-server的服務資訊。如下所示: