Spring Cloud 體驗

Spring Cloud 體驗

簡介

  • Spring Cloud爲開發人員提供了快速構建分佈式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、html

    事件總線、全局鎖、決策競選、分佈式會話等等
  • 基於Spring Boot,Spring Cloud將各公司成熟服務框架組合起來,經過Spring Boot風格封裝屏蔽掉了複雜的java

    配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包

建立服務註冊中心

  • 開發工具:Spring Tool Suitegit

  • 右鍵 > New > Spring Starter Project > name:wind-server >github

    next:選擇cloud discovery->eureka server > Finish
  • 配置服務application.ymlweb

  • 啓動一個服務註冊中心,使用註解@EnableEurekaServer,這個註解須要在springboot工程的啓動application類上加spring

  • 訪問:http://localhost:8761 觀察Spring Eureka服務註冊中心api

clipboard.png

建立服務提供者

  • 當client向server註冊時,會提供一些元數據,如主機和端口,URL,主頁等瀏覽器

  • Eureka server從每一個client實例接收心跳信息,若是心跳超時則將該實例從註冊server中刪除安全

  • 建立wind-client項目,過程同server相似springboot

  • 配置application.yml 端口8762

  • 在啓動類上加@EnableEurekaClient,代表是一個eureka client

  • 在啓動類中添加測試方法:home

  • 啓動並訪問:http://localhost:8762/hi?name...

ribbon

  • 在服務架構中,業務都會被拆分紅一個獨立的服務,服務和服務的通信是基於http restful的

  • cloud有兩種調用方式:ribbon+restTemplate和feign

  • ribbon是一個負載均衡客戶端,能夠很好的控制http和tcp的一些行爲

  • feign也用到了ribbon,當你使用@FeignClient,ribbon自動被應用

  • 啓動wing-server和wind-client,更改wind-client端口爲8763並啓動,在服務註冊中心就會有兩個服務,模擬出一個小的集羣

  • 建立服務消費者:wind-ribbon 過程同上

  • 配置服務application.yml

  • 在啓動類上加註解@EnableDiscoveryClient,向服務中心註冊一個新的服務,這時wind-ribbon既是服務提供者也是服務消費者

  • 在啓動類中註冊了一個bean: restTemplate;經過@LoadBalanced註冊代表,這個restRemplate是負載均衡的

  • 新建測試類HelloControler和HelloService

  • 啓動並訪問:http://localhost:8764/hi?name...

  • 連續訪問:頁面交替出現Hi Apolo,I am from port:8762和Hi Apolo,I am from port:8763

  • 此時的項目架構:

    • 一個服務註冊中心,wind-server,端口8761

    • wind-client工程跑了兩個副本,端口分別爲876二、8763,分別向服務註冊中心註冊

    • wind-ribbon端口爲8764,向服務註冊中心註冊

    • 當wind-ribbon經過restTemplate調用wind-client的hi接口時,由於用ribbon進行負載均衡,會輪流調用wind-client:8762和8763端口的hi接口

feign

  • Feign是一個聲明式的web服務客戶端,它使得寫web服務變得更簡單

  • 只需建立一個接口並註解,具備可插拔的註解特性,包括Feign註解和JAX-RS註解

  • 同時支持可插拔的編碼器和解碼器

  • 當使用Feign的時候,Spring Cloud整合了Ribbon和Eureka去提供負載均衡

  • 啓動wind-server,端口爲8761; 啓動wind-client 兩次,端口分別爲8762 、8773.

  • 建立項目:wind-feign 過程同上並添加spring-cloud-starter-feign和spring-boot-starter-web到pom.xml

  • 配置服務application.yml

  • 在啓動類上加註解@EnableFeignClients開啓feign,向服務註冊中心註冊,wind-feign是服務者和消費者

  • 定義一個feign的接口類,使用@FeignClient(「服務名」)來指定調用哪一個服務

  • 啓動並訪問:http://localhost:8765/hi?name... 瀏覽器交替顯示不一樣端口

  • 更改feign配置

    • 在聲明feignclient的時候,不只要指定服務名,同時須要制定服務配置類 StoreClient

    • 重寫配置,須要加@Configuration註解,並重寫下面的兩個bean 例子:FooConfiguration

斷路器

clipboard.png

出現的背景

  • 在微服務架構中,將業務拆分紅一個個的服務,服務與服務之間能夠相互調用(RPC)

  • 爲了保證高可用,高併發服務,單個服務須要集羣部署

  • 因爲網絡緣由或服務自身的緣由,不能保證100%的可用,若單個服務出現問題,調用這個服務就會出現網絡延遲,

    此時如有大量請求,會造成任務累計,致使服務癱瘓,甚至致使服務"雪崩"
  • 爲解決服務"雪崩"的問題,出現了斷路器模型

  • Netflix建立了一個Hystrix庫來實現斷路器模式。多層服務調用常見於微服務架構中

  • 較底層的服務若是出現故障,會致使連鎖故障。當對特定的服務調用達到一個閥值(hystrix是5秒20次)斷路器將會打開

  • 斷路器打開以後,能夠避免連鎖故障,fallback方法能夠直接返回一個固定值

在ribbon中使用

  • 啓動wind-server 工程;啓動wind-client工程,它的端口爲8762

  • 改造wind-ribbon工程

    • pom.xml文件中添加 spring-cloud-starter-hystrix

    • 程序入口(啓動類)添加註解@EnableHystrix

    • 服務類HelloService,服務方法上加註解@HystrixCommand,並指定fallbackMethod,返回固定值

  • 啓動並訪問:http://localhost:8764/hi?name...

    • 正常:Hi Apolo,I am from port:8762

    • 關閉wind-client服務:Hi,Apolo,sorry,error! 斷路器生效了

在feign中使用

監控管理

  • Circuit Breaker: Hystrix Dashboard (斷路器:hystrix 儀表盤)

路由網關(zuul)

介紹

  • 微服務架構的關鍵組件:服務註冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理,由這幾個組件能夠組成一個簡單的微服務架構

  • 客戶端請求 --> 通過負載均衡(zuul、Ngnix) --> 到達服務網關(zuul集羣) --> 到具體服務

  • 服務統一註冊到高可用服務註冊中心集羣

  • 服務的全部配置文件由配置服務管理,配置文件存儲在git倉庫,方便開發人員隨時更改

Zuul簡介

  • Zuul的主要功能是路由和過濾器

  • 路由功能是微服務的一部分,如/api/user映射到user服務,/api/shop映射到shop服務

  • Zuul也實現了負載均衡

Zuul使用

  • 建立wind-zuul項目,pom文件添加spring-cloud-starter-zuul

  • 啓動類上添加註解@EnableZuulProxy,啓動zuul

  • 添加配置文件application.yml

    • 首先向eureka註冊本身,端口8769,服務名service-zuul

    • 以/api-a/開頭的路由指向service-ribbon

    • 以/api-b/開頭的路由指向service-feign

  • 一次啓動5個工程,分別訪問
    http://localhost:8769/api-a/h...
    http://localhost:8769/api-b/h...
    結果一致,代表路由起做用了

Zuul服務過濾

源碼下載:

參考:http://blog.csdn.net/forezp/a...

春雨中抽出來的柳條,嬌豔欲滴
此時的烈日下,顯得憔悴而慵懶
兩岸的遊人稀少,都躲在樹下
烈日、大樹下,一陣風來,童年的記憶浮現
                2017-07-14
相關文章
相關標籤/搜索