1. 程式人生 > >微服務-springCloud快速實踐1

微服務-springCloud快速實踐1

微服務-springCloud快速實踐1:springCloud機制測試

文章目錄

完整程式碼下載連結:

https://github.com/2010yhh/springCloud-demos.git

環境

idea2018,jdk1.8,

springboot版本:springboot2.0.3.RELEASE,

springcloud版本:Finchley.SR1(2.0.1.RELEASE,)

在這裡插入圖片描述

1.springCloud配置

demo工程:

在這裡插入圖片描述

工程說明:

1.cloud-eureka:發現、註冊服務
2.cloud-service:提供服務
3.cloud-ribbon;客戶端
4.cloud-fegin:客戶端,Feign封裝了HTTP呼叫服務方法,使得客戶端像呼叫本地方法那樣直接呼叫方法
5.cloud-zuul:zuul閘道器
6.cloud-config-server:配置中心服務端(git為例)
7.cloud-config-client:獲取配置的介面

springCloud配置

1.1.首先是pom,只需引入相應版本的springCloud即可

1.2.各個工程的配置詳見程式碼中application.properties配置,

測試說明:1個Eureka註冊中心,2個服務程序,(這裡以不同的埠啟動2個cloud-service的程序),1個ribbon客戶端,1個fegin客戶端,1個zull閘道器程序,1個配置服務程序,1個配置測試客戶端程序,見下圖。

在這裡插入圖片描述

訪問Eureka註冊中心http://localhost:8761/
在這裡插入圖片描述

2.註冊中心

cloud-eureka的配置,以下測試,Eureka註冊中心使用單Eureka:

spring.application.name=eureka-server
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#單個eureka
server.port=8761
eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka/
#Eureka Server叢集:註冊其他Eureka Server,以逗號分隔,這裡以不同的埠號區分進行測試
#server.port=8762
#eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#server.port=8761
#eureka.client.service-url.defaultZone=http://localhost:8762/eureka/

3.服務呼叫和負載均衡

3.1ribbon

訪問http://localhost:8764/test?name=zyq

測試結果:會分發到不同的服務上(下圖中服務埠不同,代表不同的服務程序)

在這裡插入圖片描述

在這裡插入圖片描述

3.2fegin

訪問http://localhost:8765/test?name=zyq

測試結果:會分發到不同的服務上(下圖中服務埠不同,代表不同的服務程序)
在這裡插入圖片描述

在這裡插入圖片描述

4.zuul閘道器

cloud-zuul的application.properties:

spring.application.name=cloud-zuul
server.port=8766
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
###url路由轉發,/api-a/下的請求都轉發到服務id為cloud-ribbon的服務下對應的介面
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=cloud-ribbon
###url路由轉發,/api-a/下的請求都轉發到服務idcloud-ribbon下對應的請求
zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=cloud-feign
#zuul限流配置
zuul.ratelimit.repository=in_memory
zuul.ratelimit.enabled=true
zuul.ratelimit.behind-proxy=true
zuul.ratelimit.key-prefix=cloud-zuul
#zuul.ratelimit.default-policy.limit=3
#zuul.ratelimit.default-policy.refresh-interval=60
#zuul.ratelimit.default-policy.type=URL
zuul.ratelimit.policies.api-a.limit=3
zuul.ratelimit.policies.api-a.quota=20
zuul.ratelimit.policies.api-a.refreshInterval=60
zuul.ratelimit.policies.api-a.type=URL

zuul.ratelimit.policies.api-b.limit=6
zuul.ratelimit.policies.api-b.quota=20
zuul.ratelimit.policies.api-b.refreshInterval=60
zuul.ratelimit.policies.api-b.type=URL

這裡以簡單的密碼過濾進行測試;

1.訪問:http://localhost:8766/api-a/test?name=zyq

2.訪問:http://localhost:8766/api-a/test?name=zyq&token=123456

在這裡插入圖片描述
3.訪問:http://localhost:8766/api-b/test?name=zyq

在這裡插入圖片描述

4.訪問:http://localhost:8766/api-b/test?name=zyq&token=123456

在這裡插入圖片描述

5.多次訪問:http://localhost:8766/api-b/test?name=zyq&token=123456

在這裡插入圖片描述

結果說明:

1.###url路由轉發,/api-a/下的請求都轉發到服務id為cloud-ribbon的服務下對應的介面

2.###url路由轉發,/api-a/下的請求都轉發到服務idcloud-ribbon下對應的請求

3.token校驗通過的才進行轉發,校驗不通過的返回異常資訊。

4.zuul限流次數,達到設定的限流次數時,會觸發限流措施,丟擲訪問過多的異常

5.zuul閘道器轉發仍然會進行負載均衡

6.Zuul 目前只支援服務級別的熔斷,不支援具體到某個介面進行熔斷

5.服務降級:hystrix斷路器

5.1.停掉1個cloud-service程序

請求會始終落在另一個服務上

5.2.停掉2個cloud-service程序

1)ribbon

訪問:cloud-ribbon中的介面:http://localhost:8764/test?name=zyq

test介面進行了服務降級

在這裡插入圖片描述
http://localhost:8764/test2?name=zyq

test2介面沒有進行服務降級,直接丟擲了異常資訊

在這裡插入圖片描述

2)feign

訪問:cloud-feign中的介面:http://localhost:8765/test?name=zyq

在這裡插入圖片描述

3)服務降級,zuul

服務不可用時,zuul直接返回了服務級別的資訊,而不是介面中的熔斷機制

在這裡插入圖片描述

6.配置中心

需要建立git倉庫,上傳配置檔案,如下圖所示

在這裡插入圖片描述

config-server的application.properties配置

server.port=8770
spring.application.name=config-server
# 配置git倉庫地址
[email protected]:2010yhh/springCloud-demos.git
# git倉庫地址下的相對路徑,可以配置多個,用,分割
spring.cloud.config.server.git.search-paths=/
# 配置倉庫的分支
spring.cloud.config.label=master
# 訪問git倉庫的使用者名稱
spring.cloud.config.server.git.username=****
# 訪問git倉庫的使用者密碼 如果Git倉庫為公開倉庫,可以不填寫使用者名稱和密碼,如果是私有倉庫需要填寫
spring.cloud.config.server.git.password=****
#配置服務註冊中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

config-client的bootstrap.properties配置

#對應git上的配置檔案:config-dev.properties
spring.application.name=config
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri=http://localhost:8770

6.1直接訪問server

在這裡插入圖片描述

在這裡插入圖片描述
6.2從config-server獲取git上的配置資訊
在這裡插入圖片描述

在這裡插入圖片描述