項目後臺框架是使用的springboot ,前端使用的是angularJS,中間使用gateway做一層轉發。其實也是微服務的思想。那麼在gateway這層怎麼實現負載均衡。就使用到了zuul,那麼可以使用zuul 的Ribbon來實現負載均衡。
這個是我們項目原先做了一個配置。主要是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發佈起來了。
修改配置:
添加的配置 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下的同一個用戶的所有請求被代理到同一個實例",在接下來的研究中,我會在後面慢慢分享