SpringCloud入門

SpringCloud講解

標簽: springcloud api


springcloud 講解

  • 基本內(nèi)容

配置管理,服務(wù)注冊沉帮,服務(wù)發(fā)現(xiàn)锈死,斷路器,智能路由穆壕,負載均衡待牵,微代理,服務(wù)間調(diào)用喇勋,一次性令牌缨该,控制總線,思維導圖川背,全局鎖贰拿,領(lǐng)導選舉,集群狀態(tài)熄云,分布式會話膨更,分布式消息。

  • springboot與springcloud區(qū)別

spingboot 2.0.3.RELEASE->springcloud Finchley.RC2,版本命名規(guī)則:倫敦地鐵站命名(目前基于springboot 2.0.3 )maven基于3.3.9+

springcloud 配置入門

springcloud官網(wǎng)

微服務(wù)啟動.png
eureka.png
redis.png
天氣界面.png

服務(wù)注冊與發(fā)現(xiàn)

  • eureka server

注冊服務(wù)器搭建缴允,本注冊服務(wù)搭建采用maven3.3.9版本荚守,添加注冊服務(wù)器依賴。并配置相應(yīng)參數(shù)(yml文件)练般。并綁定注冊啟動類矗漾。

<?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.xiaojinzi</groupId>
    <artifactId>misco_weather_eureka_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>misco_weather_eureka_demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RC2</spring-cloud.version>
    </properties>

    <dependencies>

        <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <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>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>


</project>

server:
  port: 8761 # 服務(wù)端口

eureka:
  instance:
    hostname: localhost # 設(shè)置主機名
  client:
    registerWithEureka: false # 是否向自己注冊服務(wù)。該應(yīng)用為服務(wù)注冊中心踢俄,不需要自注冊缩功,設(shè)置為 false
    fetchRegistry: false # 是否檢索服務(wù)。該應(yīng)用為服務(wù)注冊中心都办,職責為注冊和發(fā)現(xiàn)服務(wù)嫡锌,無需檢索服務(wù)虑稼,設(shè)置為 false
    serviceUrl:
      deafultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 設(shè)置同步為空時的等待時間。默認 5 * MINUTES
@SpringBootApplication
@EnableEurekaServer
public class MiscoWeatherEurekaDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MiscoWeatherEurekaDemoApplication.class, args);
    }
}
  • eureka client

注冊服務(wù)器客戶端势木。

<!--eureka-client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
spring:
  application:
    name: misco_weather_client_demo
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ # 服務(wù)注冊地址
@SpringBootApplication
@EnableDiscoveryClient
public class MiscoWeatherClientDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MiscoWeatherClientDemoApplication.class, args);
    }
}
  • 實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn)

天氣系統(tǒng)中的四個服務(wù)項目修改蛛倦,通過將每個服務(wù)中添加客戶端的配置。從而實現(xiàn)注冊啦桌。這里只以修改數(shù)據(jù)收集為案例溯壶。

<?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.xiaojinzi</groupId>
    <artifactId>misco_weather_data</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>misco_weather_data</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RC2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--請求發(fā)送-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

        <!--定時器-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>


</project>

server:
  port: 8090
spring:
  application:
    name: misco_weather_data_client
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
@EnableDiscoveryClient

服務(wù)消費

  • httpclient

參考數(shù)據(jù)獲取api調(diào)用方式。

  • ribbon

客戶端模式的負載均衡甫男。

  • feign

客戶端模式的負載均衡且改。案例通過feign的方式獲取城市列表信息。啟動注冊服務(wù)器和城市信息獲取的服務(wù)注冊板驳,添加一個通過feign調(diào)用城市列表的服務(wù)又跛。

依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

調(diào)用方式

@FeignClient("misco-city-data-client")
@Service
public interface CityListService {
    @GetMapping("/city/list")
    String cityList();
}
  • 基于feign實現(xiàn)天氣服務(wù)之間的相互通信。其中包括天氣數(shù)據(jù)采集城市數(shù)據(jù)來源與城市數(shù)據(jù)微服務(wù),其中城市數(shù)據(jù)展示api獲取來源于城市采集數(shù)據(jù)微服務(wù)。

GitHub項目地址

  • 負載均衡

服務(wù)端的負載均衡實現(xiàn)京革。eureka會采用系統(tǒng)的負載均衡算法實現(xiàn)負載均衡,我們可以將同一個服務(wù)已不同端口的方式運行礼烈,當某一個宕機的時候,系統(tǒng)會實現(xiàn)負載均衡調(diào)用婆跑。

API網(wǎng)關(guān)

統(tǒng)一API入口此熬,數(shù)據(jù)安全。

  • 優(yōu)點

[1] 避免內(nèi)部信息泄露

[2] 為微服務(wù)提供添加額外的安全層

[3] 支持混合通信

[4] 降低構(gòu)建微服務(wù)的復雜性

[5] 微服務(wù)虛擬與虛擬化

  • 缺點

[1] 架構(gòu)編排與管理

[2] 路由配置統(tǒng)一管理

[3] 引發(fā)單點故障

  • 實現(xiàn)方式

[1] nginx 方向代理

[2] spring cloud zuul

zuul集成

  • 功能

認證洽蛀、壓力測試摹迷、金絲雀測試、動態(tài)路由郊供、負載削減峡碉、安全、靜態(tài)響應(yīng)處理驮审、主動交換管理鲫寄。

  • 基本參數(shù)
zuul:
    routes: 
        hi(不固定):
            path: /**/**
            serviceId: 應(yīng)用名稱
  • 結(jié)合天氣項目實現(xiàn)

配置API網(wǎng)關(guān)。提供zuul來進行網(wǎng)關(guān)疯淫。

GitHub地址

集中化配置

springcloud config

  • 服務(wù)端配置
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
spring.cloud.config.server.git.uri = ****(配置文件服務(wù)器地址)
spring.cloud.config.server.git.searchPaths = ***(配置文件目錄)
  • 客戶端配置
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
spring.cloud.config.profile=文件
spring.cloud.config.uri=配置中心地址
  • 服務(wù)器配置文件命名規(guī)范

官方說明

服務(wù)熔斷

表示對服務(wù)進行熔斷機制地来。通過設(shè)置可能存在熔斷的服務(wù),并當出現(xiàn)斷路時熙掺,提供熔斷回調(diào)內(nèi)容未斑。

  • 依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  • 啟動類注解
@EnableCirculBreaker
  • 出現(xiàn)熔斷的回調(diào)
@HystixCommand(fallbackMethod="defaultCities")
  • 聯(lián)合feign使用

通過設(shè)置回調(diào)類,并實現(xiàn)接口币绩,通過設(shè)置回調(diào)的內(nèi)容蜡秽。啟動feign熔斷機制府阀。

@FeignClient(name="**",fallback="回調(diào)類")
feign:
    hustrix:
        enabled: true

微服務(wù)自動擴展

優(yōu)點:提高高可用和容錯機制;增加可伸縮性芽突;最佳使用率试浙,節(jié)約成本;優(yōu)先考慮某些服務(wù)或服務(wù)組寞蚌。

問題:管理容器田巴?監(jiān)控?應(yīng)用規(guī)則與約束挟秤?容器獲取資源效率壹哺?確保最小實例運行?確保服務(wù)正常運行艘刚?滾動升級與遷移斗躏?錯誤回滾?


  • 本篇博客原視頻博主[從天氣項目觀看springcloud微服務(wù)智力]
  • 本篇博客撰寫人: XiaoJinZi 轉(zhuǎn)載請注明出處
  • 學生能力有限 附上郵箱: 986209501@qq.com 不足以及誤處請大佬指責
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔脯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笛臣,更是在濱河造成了極大的恐慌云稚,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沈堡,死亡現(xiàn)場離奇詭異静陈,居然都是意外死亡,警方通過查閱死者的電腦和手機诞丽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門鲸拥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人僧免,你說我怎么就攤上這事刑赶。” “怎么了懂衩?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵撞叨,是天一觀的道長。 經(jīng)常有香客問我浊洞,道長牵敷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任法希,我火速辦了婚禮枷餐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苫亦。我一直安慰自己毛肋,他們只是感情好怨咪,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著村生,像睡著了一般惊暴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趁桃,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天辽话,我揣著相機與錄音,去河邊找鬼卫病。 笑死油啤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蟀苛。 我是一名探鬼主播益咬,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帜平!你這毒婦竟也來了幽告?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤裆甩,失蹤者是張志新(化名)和其女友劉穎冗锁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤栓,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡冻河,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茉帅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叨叙。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堪澎,靈堂內(nèi)的尸體忽然破棺而出擂错,到底是詐尸還是另有隱情,我是刑警寧澤全封,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布马昙,位于F島的核電站,受9級特大地震影響刹悴,放射性物質(zhì)發(fā)生泄漏行楞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一土匀、第九天 我趴在偏房一處隱蔽的房頂上張望子房。 院中可真熱鬧,春花似錦、人聲如沸证杭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解愤。三九已至镇饺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間送讲,已是汗流浹背奸笤。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哼鬓,地道東北人监右。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像异希,于是被迫代替她去往敵國和親健盒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容