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