一. 背景
最近基於SpringCloud+SpringSecurity+Auth2微服務改造項目終於上線,有心思和時間進行整理項目資料,廢話不多說,直接上圖
先來一張官方文檔說明,可以看出微服務架構適應於物聯網、移動端、瀏覽器,學習並使用微服務是很有必要的一件事。
下面這張圖是我所在項目所構建的項目架構圖
因爲項目緊急,並未使用SpringCloud的配置中心,僅僅使用了SpringCloud的以下組件:
1.Feign聲明式調用
2.Zuul路由轉發
3.Zipkin調用分析
4.Eureka註冊中心
5.Hystrix熔斷
二.架構思路
其實本人也是第一次進行項目架構,屬於趕鴨子上架那種,木辦法,Not me who,Not now when !
誰不想擁有一個高可用、低耦合、易擴展的coding體系,但真正實操起來,才發現有多欠,暫時不表。
1.爲了實現每個服務模塊的低耦合,每個服務模塊都有自己的依賴包xxx-share.jar
2.爲了實現高可用,使每個模塊都可獨立部署並隨時增加/刪除服務節點xxx-server
感覺還是在說廢話!!!
3.來點乾貨,項目中使用的技術棧由以下幾部分:
(1)基於SpringSecurity+Auth2做的授權認證
(2)RocketMq的消息隊列
(3)Redis集羣緩存服務
(4)自定義線程池
(5)mybatis
(6)hikari數據庫連接池
(7)lombok
據阿里P8大佬說,如果你能玩轉Spring和redis基本上就足以應付目前所有的業務開發,不要問我爲啥用上面的技術選型,大概也許這就是所謂的緣分吧。
三.實戰
不能說太多概念上的東西,先玩起來再說,說太多概念性的東西容易讓人厭煩。
1.eureka原理
eureka是爲CS架構的註冊中心,分爲服務端server和客戶端client.
(1). eureka-server的作用主要有以下幾點
eureka-server主要集中在提供服務註冊和發現的功能,在服務治理方面不如dubbo做得好。它主要是通過維護兩層緩存機制來維護註冊表,通過註冊和心跳機制來維護更新同步各個客戶端的狀態。
(2).eureka-client的作用有以下幾點
eureka-client通過和eureka-server進行註冊、心跳通訊來完成服務註冊和服務續約。默認30秒進行一次心跳來告知eureka-server哥們,我還活着。當90秒內eureka-server還沒收到來自eureka-client的心跳就會把eureka-client給剔除掉。
2.註冊中心-eureka-server
(1)eureka-server基礎配置
#基礎信息配置
server:
port: 8080
spring:
application:
name: eureka-server
security:
user:
name: admin
password: admin123
#註冊中心
eureka:
instance:
hostname: eureka-server
#server收到下次心跳的超時時間,如果30秒還收不到,那你這個instance就拜拜,不和你玩了
leaseExpirationDurationInSeconds: 30
#client發送給server心跳的時間間隔
leaseRenewalIntervalInSeconds: 10
preferIpAddress: true
ipAddress: ${spring.cloud.client.ip-address}
instanceId: ${spring.cloud.client.ip-address}:${server.port}
server:
# 自我保護模式關閉
enableSelfPreservation: false
# 掃描失效服務的間隔時間
eviction-interval-timer-in-ms: 30000
client:
#防止向自己註冊
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${spring.cloud.client.ip-address}:${server.port}/eureka/
logging:
level:
org.springframework.security: DEBUG
config: classpath:logback.xml
(2)註冊中心訪問保護
註冊中心服務訪問的頁面最好使用基礎的認證,儘量保證安全。
同時可以保證每個註冊過來的服務都是我們自己想要註冊的。
(3)官方eureka閉源了,無需擔心,總會有解決方案
3.eureka-client註冊服務
(1)eureka-client其實就是一個獨立的服務,配置如下:
#註冊中心
eureka:
client:
serviceUrl:
defaultZone: http://admin:admin123@localhost:8080/eureka/
instance:
preferIpAddress: true
ipAddress: ${spring.cloud.client.ip-address}
instanceId: ${spring.cloud.client.ip-address}:${server.port}
(2)eureka-client服務的啓動類上應加上@EnableEurekaClient
實戰代碼,正在緊急從業務剝離中~~~~~~