微服務-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上的配置資訊