1. 程式人生 > 其它 >Springboot 框架 gateway 前後端分離 實現 zuul Ribbon 負載均衡 脫離Eureka實現

Springboot 框架 gateway 前後端分離 實現 zuul Ribbon 負載均衡 脫離Eureka實現

專案後臺框架是使用的springboot ,前端使用的是angularJS,中間使用gateway做一層轉發。其實也是微服務的思想。那麼在gateway這層怎麼實現負載均衡。就使用到了zuul,那麼可以使用zuul 的Ribbon來實現負載均衡。

zuul:
  host:
    connect-timeout-millis: 5000
    socket-timeout-millis: 20000
  routes:
    platform-service:
      path: /api/**
      url: http://localhost:8010
      stripPrefix: false
      sensitiveHeaders:
    image-detect-service:
      path: /ids/**
      url: http://localhost:8011
      stripPrefix: false
      sensitiveHeaders:

這個是我們專案原先做了一個配置。主要是zuul實現轉發(未使用Ribbon,未使用Eureka),其中routes下面的 platform-service和image-detect-service是後臺的兩個獨立的專案,他們的RestApi路徑使用了不同的標識(這是我們自己定義的規範)。反正實現的效果就是,如果路徑是api開頭就轉發到8010埠,如果是路徑是/ids開頭那麼就轉發到8011埠另外一個專案。重寫了zuul中的pro前置過濾器能夠實現。

接下來實現負載均衡 (接下來我們只對platform-service這個專案進行負載均衡)

首先我們將platform-service這個專案啟用兩個不同的埠釋出起來

先在idea中dev.yml將server:port 修改為8012通過mvn clean compile install -DskipTests將專案編譯,然後再target資料夾,將war包拷貝出來,在war包這個資料夾開啟cmd命令列,執行 java -jar xxx.war釋出 ,然後再在idea中獎port修改為8010,通過idea釋出。這樣platform-service就在8010和8012釋出起來了。

修改配置:

zuul:
  host:
    connect-timeout-millis: 5000
    socket-timeout-millis: 20000
  routes:
    platform-service:
      path: /api/**
#      url: http://localhost:8010   //註釋掉這個url
      stripPrefix: false
      sensitiveHeaders:
    image-detect-service:
      path: /ids/**
      url: http://localhost:8011
      stripPrefix: false
      sensitiveHeaders:

platform-service:     //新增服務配置
  ribbon:
    listofServers: http://localhost:8010,http://localhost:20001

ribbon:
  eureka:
    enabled: false   //宣告不依賴eureka

新增的配置 platform-service 是和zuul:rotes:platform-service中同名的。 listOfServices是platfor-service專案的服務列表地址和埠,多個的話使用,將其分割。

ribbon:eureka:enabled:false這個設定的是禁用eureka。

現在就ok了,啟動專案訪問測試,會發現呼叫不同的埠訪問platform-service,也可以將8010的埠關閉,它會直接去訪問8012埠的專案,這就是ribbon實現負載均衡和nginx實現的負載均衡不一樣,如果是nginx實現的,如果你upstream的服務宕機了,那麼不會自動的去尋找下一個服務。這時候ribbon預設的啟動的策略是RoundRobinRule 也就是輪詢策略。

我也是最近在研究ribbon負載均衡和叢集.現在能夠實現負載均衡了。那麼在接下來我們在研究怎麼去更換策略,如何使用自定義策略實現 "同一個ip下的同一個使用者的所有請求被代理到同一個例項",在接下來的研究中,我會在後面慢慢分享