1. 程式人生 > 程式設計 >Spring Cloud Eureka 簡單使用

Spring Cloud Eureka 簡單使用

1. eureka出現的原因

我們知道在微服務的架構中,通常會根據系統的特性、特點將系統成分成多個模組(服務),用於應對高併發,大量資料的對外服務。

這時,拆分系統後,比如將拆分成了 訂單服務,商品服務,使用者服務,庫存服務,積分服務,積分服務等,拆開後就代表可以獨自發布。

這樣就導致了 各個服務之間 不能互相通訊了,比如 下單時,需要減庫存(庫存服務),需要給下單人 加積分(積分服務)等。

所以為了 能夠讓對應的模組 獲取其他的模組資訊,首先要解決的問題就是要知道,我需要的服務在哪裡?

這樣就出現了一種解決方案,那就是用個第三方來儲存 所有的服務的元資訊(可以簡單理解為ip:port),這個第三方就稱為 服務註冊中心

微服務架構中 常用的註冊中心有 eureka,zookeeper,nacos等。

我這看下eureka的簡單使用

2. eureka server 單節點配置

新建一個工程

  1. pom.xml配置

我這裡採用的是當前最新版本

SpringBoot版本為:2.1.8.RELEASE

SpringCloud版本為:Greenwich.SR2

  1. 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把這個埠禁用了,有的瀏覽器能用。

  1. 啟動類上 新增 @EnableEurekaServer 註解
// 新增 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class LinnEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(LinnEurekaApplication.class,args);
    }

}
複製程式碼
  1. 需要修改下 host

windows 系統在 C:\Windows\System32\drivers\etc\hosts 開啟後新增

  1. 啟動後 訪問 http://server:7000 看到下面的 頁面 表示 配置成功

3. eureka server高可用叢集配置

eureka支援配置叢集,即每一臺 Eureka 都在配置中指定另一個 Eureka 或多個 地址作為夥伴,它在啟動時會向夥伴節點獲取註冊列表

配置如下:

  1. 首先 弄三個(我這配置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/
複製程式碼
  1. 分別以不同的 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中可以直接配置指定:

  1. 啟動後分別訪問 server1:7001,server2:7002,server3:7003 比如訪問 server1:7001

看到有另外的兩個副本 表示 配置成功

  1. 配置的話也可以這麼配置(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工程,模擬訂單服務,分三步走:

  1. 新增依賴(在對應的服務中)
        <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>
複製程式碼
  1. 在啟動類上加上註解 @EnableEurekaClient
// 新增  @EnableEurekaClient 註解
// 後來看官網說是 可以不用加 @EnableEurekaClient 註解(只需要新增上面的依賴就可以了),我沒有加也是可以註冊上去的
//@EnableEurekaClient
@SpringBootApplication
public class LinnOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(LinnOrderApplication.class,args);
    }

}
複製程式碼
  1. 配置檔案 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
複製程式碼
  1. 啟動工程

訪問之前註冊中心地址 server1:7001

看到 有order-service註冊上去了

5. eureka 客戶端 叢集配置

這裡叢集就是 每個被拆分的服務 分多分部署,比如還是以訂單為例

  1. 新建兩個配置檔案 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
複製程式碼
  1. 以不同的 profiles 啟動

java -jar xxx.jar --spring.profiles.active=order1 java -jar xxx.jar --spring.profiles.active=order2

或者在idea中配置

  1. 訪問server1:7001

可以看到 order-service 有兩個服務提供 分別在 9001 和9002 埠,這就表示 客戶端叢整合功了

6. 小看

這裡只是簡單的操作使用,還有很多的配置,沒有嘗試,後續用到再說。

【參考】:www.cnblogs.com/knowledgese…