SpringCloud的入門學習

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的服務信息。如下所示:

 

作者:別先生

博客園:https://www.cnblogs.com/biehongli/

如果您想及時得到個人撰寫文章以及著作的消息推送,可以掃描上方二維碼,關注個人公衆號哦。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章