SpringCloud組件和概念介紹
一:什麼是微服務(Microservice)
微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織爲一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,並通過各自暴露的API接口相互通訊。它們彼此相互協作,作爲一個整體爲用戶提供功能,卻可以獨立地進行擴。
微服務架構需要的功能或使用場景
1:我們把整個系統根據業務拆分成幾個子系統。
2:每個子系統可以部署多個應用,多個應用之間使用負載均衡。
3:需要一個服務註冊中心,所有的服務都在註冊中心註冊,負載均衡也是通過在註冊中心註冊的服務來使用一定策略來實現。
4:所有的客戶端都通過同一個網關地址訪問後臺的服務,通過路由配置,網關來判斷一個URL請求由哪個服務處理。請求轉發到服務上的時候也使用負載均衡。
5:服務之間有時候也需要相互訪問。例如有一個用戶模塊,其他服務在處理一些業務的時候,要獲取用戶服務的用戶數據。
6:需要一個斷路器,及時處理服務調用時的超時和錯誤,防止由於其中一個服務的問題而導致整體系統的癱瘓。
7:還需要一個監控功能,監控每個服務調用花費的時間等。
目前主流的微服務框架:Dubbo、 SpringCloud、thrift、Hessian等,目前國內的中小企業用的大多數都是Dubbo,SpringCloud估計很少,也許有些開發同學都沒聽說過。
二:SpringCloud項目簡介
springCloud是基於SpringBoot的一整套實現微服務的框架。他提供了微服務開發所需的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等組件。最重要的是,
跟spring boot框架一起使用的話,會讓你開發微服務架構的雲服務非常好的方便。
SpringBoot旨在簡化創建產品級的 Spring 應用和服務,簡化了配置文件,使用嵌入式web服務器,含有諸多開箱即用微服務功能
相關組件架構圖
spring cloud子項目包括:
Spring Cloud Config:配置管理開發工具包,可以讓你把配置放到遠程服務器,目前支持本地存儲、Git以及Subversion。
Spring Cloud Bus:事件、消息總線,用於在集羣(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。
Spring Cloud Netflix:針對多種Netflix組件提供的開發工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
Netflix Eureka:雲端負載均衡,一個基於 REST 的服務,用於定位服務,以實現雲端的負載均衡和中間層服務器的故障轉移。
Netflix Hystrix:容錯管理工具,旨在通過控制服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。
Netflix Zuul:邊緣服務工具,是提供動態路由,監控,彈性,安全等的邊緣服務。
Netflix Archaius:配置管理API,包含一系列配置管理API,提供動態類型化屬性、線程安全配置操作、輪詢框架、回調機制等功能。
Spring Cloud for Cloud Foundry:通過Oauth2協議綁定服務到CloudFoundry,CloudFoundry是VMware推出的開源PaaS雲平臺。
Spring Cloud Sleuth:日誌收集工具包,封裝了Dapper,Zipkin和HTrace操作。
Spring Cloud Data Flow:大數據操作工具,通過命令行方式操作數據流。
Spring Cloud Security:安全工具包,爲你的應用程序添加安全控制,主要是指OAuth2。
Spring Cloud Consul:封裝了Consul操作,consul是一個服務發現與配置工具,與Docker容器可以無縫集成。
Spring Cloud Zookeeper:操作Zookeeper的工具包,用於使用zookeeper方式的服務註冊和發現。
Spring Cloud Stream:數據流操作開發包,封裝了與Redis,Rabbit、Kafka等發送接收消息。
Spring Cloud CLI:基於 Spring Boot CLI,可以讓你以命令行方式快速建立雲組件。
SpringCloud特點
1:約定優於配置
2:開箱即用、快速啓動
3:適用於各種環境
4:輕量級的組件
5:組件支持豐富,功能齊全
三: SpringBoot瞭解
Spring Boot讓我們的Spring應用變的更輕量化。比如:你可以僅僅依靠一個Java類來運行一個Spring引用。你也可以打包你的應用爲jar並通過使用java -jar來運行你的Spring Web應用。
由於SpringCloud依賴SpringBoot,所以在學習SpringCloud框架之前需要了解下SpringBoot。
SpringBoot的主要優點:
1:爲所有Spring開發者更快的入門
2:開箱即用,提供各種默認配置來簡化項目配置
3:內嵌式容器簡化Web項目
4:沒有冗餘代碼生成和XML配置的要求
SpringCloud之Eureka
一:Eureka簡介
Eureka是Spring Cloud Netflix的一個子模塊,也是核心模塊之一。用於雲端服務發現,一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。
服務註冊與發現對於微服務系統來說非常重要。有了服務發現與註冊,你就不需要整天改服務調用的配置文件了,你只需要使用服務的標識符,就可以訪問到服務。他的功能類似於dubbo的註冊中心(register)。
服務發現:服務發現是微服務基礎架構的關鍵原則之一。試圖着手配置每個客戶端或某種格式的約定可以說是非常困難的和非常脆弱的。Eureka是Netflix服務發現的一種服務和客戶端。這種服務是可以被高可用性配置的和部署,並且在註冊的服務當中,每個服務的狀態可以互相複製給彼此。
服務註冊:當一個客戶端註冊到Eureka,它提供關於自己的元數據(諸如主機和端口,健康指標URL,首頁等)Eureka通過一個服務從各個實例接收心跳信息。如果心跳接收失敗超過配置的時間,實例將會正常從註冊裏面移除
下圖是基本的服務註冊和發現
二:Eureka服務發現和註冊(創建註冊中心)
1:創建一個基礎的Spring Boot工程,並在pom.xml中引入需要的依賴內容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo.springcloud</groupId> <artifactId>eureka_register_service</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>eureka_register_service</name> <description>Spring Cloud project</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2:創建一個啓動類Application
package com.demo.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
通過@EnableEurekaServer註解啓動一個服務註冊中心提供給其他應用進行對話。
3:創建一個配置文件 application.properties,注意不要出現空格,否啓動報錯
server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4:執行bluid.sh進行構建,然後執行main方法。本人由於在eclipse下沒有進行手動編譯,啓動的時候一直讀取不到application.properties。
5:查看註冊中心
http://127.0.0.1:8000/ 可以看到如下圖
是不是很簡單啊,那麼人要問了,爲什麼連登陸賬號和密碼都沒有,在外網不是直接能進入註冊中心, 這樣很不安全啊。好,那我們加入登陸賬號和密碼
三:Eureka註冊中心加入權限
1:加入註冊中心需要引入jar,在pom.xml加入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2:配置文件新建一個bootstrap.yml文件
security: basic: enabled: true user: name: admin password: 123
記得重新編譯打包然後執行main方法。
四:註冊一個服務
首先要去掉註冊中心加入的權限,不然服務端會鏈接不上註冊中心進行註冊的,本人還不知怎麼配服務端連接註冊中心賬號和密碼的配置。
創建一個biz-serice-0的工程服務,相關代碼我不在這裏說明,可以直接git下載 https://github.com/zhp8341/SpringCloudDemo
執行demo應該能看上面的結果,下圖是註冊中心找到的服務BIZ-SERVICE-0,上圖是服務暴露的接口