Spring Cloud Eureka 簡單使用
1. eureka出現的原因
我們知道在微服務的架構中,通常會根據系統的特性、特點將系統成分成多個模組(服務),用於應對高併發,大量資料的對外服務。
這時,拆分系統後,比如將拆分成了 訂單服務,商品服務,使用者服務,庫存服務,積分服務,積分服務等,拆開後就代表可以獨自發布。
這樣就導致了 各個服務之間 不能互相通訊了,比如 下單時,需要減庫存(庫存服務),需要給下單人 加積分(積分服務)等。
所以為了 能夠讓對應的模組 獲取其他的模組資訊,首先要解決的問題就是要知道,我需要的服務在哪裡?
這樣就出現了一種解決方案,那就是用個第三方來儲存 所有的服務的元資訊(可以簡單理解為ip:port),這個第三方就稱為 服務註冊中心
微服務架構中 常用的註冊中心有 eureka,zookeeper,nacos等。
我這看下eureka的簡單使用
2. eureka server 單節點配置
新建一個工程
- pom.xml配置
我這裡採用的是當前最新版本
SpringBoot版本為:2.1.8.RELEASE
SpringCloud版本為:Greenwich.SR2
- application.yml
# 埠號
server:
port: 7000
spring:
application:
name: eureka-server
eureka:
instance:
hostname: server
client:
# 是否拉取 註冊的服務資訊,預設false;因為這是一個單點的EurekaServer,不需要同步其它EurekaServer節點的資料
fetch-registry: false
# 是否註冊自身到eureka服務,預設false
register-with-eureka: false
複製程式碼
注意 :6000這個埠不要用,一個坑,好像chrome.edge把這個埠禁用了,有的瀏覽器能用。
- 啟動類上 新增 @EnableEurekaServer 註解
// 新增 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class LinnEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(LinnEurekaApplication.class,args);
}
}
複製程式碼
- 需要修改下 host
windows 系統在 C:\Windows\System32\drivers\etc\hosts 開啟後新增
- 啟動後 訪問 http://server:7000 看到下面的 頁面 表示 配置成功
3. eureka server高可用叢集配置
eureka支援配置叢集,即每一臺 Eureka 都在配置中指定另一個 Eureka 或多個 地址作為夥伴,它在啟動時會向夥伴節點獲取註冊列表
配置如下:
- 首先 弄三個(我這配置3個機器)配置檔案 比如 application-server1.yml,application-server2.yml,application-server3.yml
① application-server1.yml檔案
# 埠號
server:
port: 7001
eureka:
instance:
hostname: server1
client:
# 是否拉取 註冊的服務資訊,預設true
fetch-registry: false
# 是否註冊自身到eureka服務,預設true
register-with-eureka: false
# 如果是單節點eureka-server, 這裡可以不用寫 ;如果寫了 表示 配置成 高可用叢集,用逗號分割 其他server地址
serviceUrl:
defaultZone: http://server2:7002/eureka/,http://server3:7003/eureka/
複製程式碼
② application-server2.yml檔案
# 埠號
server:
port: 7002
eureka:
instance:
hostname: server2
client:
# 是否拉取 註冊的服務資訊,預設true
fetch-registry: false
# 是否註冊自身到eureka服務,預設true
register-with-eureka: false
# 如果是單節點eureka-server, 這裡可以不用寫 ;如果寫了 表示 配置成 高可用叢集,用逗號分割 其他server地址
serviceUrl:
defaultZone: http://server1:7001/eureka/,http://server3:7003/eureka/
複製程式碼
③ application-server3.yml檔案
# 埠號
server:
port: 7003
eureka:
instance:
hostname: server3
client:
# 是否拉取 註冊的服務資訊,http://server2:7002/eureka/
複製程式碼
- 分別以不同的 profile 啟動
java -jar xxx.jar --spring.profiles.active=server1
java -jar xxx.jar --spring.profiles.active=server2
java -jar xxx.jar --spring.profiles.active=server3
如果在 idea中可以直接配置指定:
- 啟動後分別訪問 server1:7001,server2:7002,server3:7003 比如訪問 server1:7001
看到有另外的兩個副本 表示 配置成功
- 配置的話也可以這麼配置(profiles多種寫法),啟動後同樣可以看到
spring:
application:
name: eureka-server
eureka:
client:
# 是否拉取 註冊的服務資訊,預設true
fetch-registry: false
# 是否註冊自身到eureka服務,預設true
register-with-eureka: false
serviceUrl:
defaultZone: http://server6:7006/eureka/,http://server7:7007/eureka/,http://server8:7008/eureka/
---
spring:
profiles: es1
server:
port: 7006
eureka:
instance:
hostname: server6
---
spring:
profiles: es2
# 埠號
server:
port: 7007
eureka:
instance:
hostname: server7
---
spring:
profiles: es3
# 埠號
server:
port: 7008
eureka:
instance:
hostname: server8
複製程式碼
4. eureka 客戶端
客戶端就是所有的服務提供方,比如使用者服務,訂單服務,庫存服務,都需要註冊到 eureka。
註冊到 eureka非常簡單,我建立了一個order-service工程,模擬訂單服務,分三步走:
- 新增依賴(在對應的服務中)
<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>
複製程式碼
- 在啟動類上加上註解 @EnableEurekaClient
// 新增 @EnableEurekaClient 註解
// 後來看官網說是 可以不用加 @EnableEurekaClient 註解(只需要新增上面的依賴就可以了),我沒有加也是可以註冊上去的
//@EnableEurekaClient
@SpringBootApplication
public class LinnOrderApplication {
public static void main(String[] args) {
SpringApplication.run(LinnOrderApplication.class,args);
}
}
複製程式碼
- 配置檔案 application.yml
# 應用名稱
spring:
application:
name: order-service
server:
port: 9000
eureka:
client:
serviceUrl:
# 註冊中心地址,寫一個即可,其他會同步過去
#defaultZone: http://server1:7001/eureka,http://server2:7002/eureka,http://server3:7003/eureka,
defaultZone: http://server1:7001/eureka
複製程式碼
- 啟動工程
訪問之前註冊中心地址 server1:7001
看到 有order-service註冊上去了
5. eureka 客戶端 叢集配置
這裡叢集就是 每個被拆分的服務 分多分部署,比如還是以訂單為例
- 新建兩個配置檔案 application-order1.yml,application-order2.yml
①application-order1.yml 檔案
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://server1:7001/eureka
複製程式碼
②application-order2.yml 檔案
server:
port: 9002
eureka:
client:
serviceUrl:
defaultZone: http://server1:7001/eureka
複製程式碼
- 以不同的 profiles 啟動
java -jar xxx.jar --spring.profiles.active=order1 java -jar xxx.jar --spring.profiles.active=order2
或者在idea中配置
- 訪問server1:7001
6. 小看
這裡只是簡單的操作使用,還有很多的配置,沒有嘗試,後續用到再說。