spring cloud 入門(五)【負載均衡與 FeignClient 容錯機制一(通過類容錯)】
阿新 • • 發佈:2018-12-11
一 負載均衡
spring cloud 負載均衡非常簡單,現在服務提供者 menu,重新copy 一份munu ,命名 menu2 ,將埠 修改為 8764 ,其他配置都不變
這個時候 如何 再次呼叫 user/getMenu 介面, 檢視 menu 和 menu2 的日誌,我們可以看出來,user 訪問一次,兩個 menu 是通過 輪詢交替訪問的
容錯機制
容錯是榮的 伺服器 提供者的 錯,如何服務提供者 程式碼邏輯有問題,就會報錯
修改 menu 提供者 menu/getMenu 程式碼,
修改 MenuController 程式碼,直接拋異常
@RequestMapping(value = "/menu/getMenu")
public @ResponseBody
List<Map<String, Object>>
getSubNav(HttpServletRequest request, HttpServletResponse response) {
throw new RuntimeException();
}
這個時候,我們再通過 user 呼叫 menu 微服務 中getMenu 的方法
顯然 這個將錯誤 直接列印到頁面上 是非常不友好的
spring cloud 提供了 Hystric 元件 對這樣的問題進行處理,具體操作如下:
以下操作都再服務消費方進行修改,也就是在user中 進行修改
第一個坑:
feign.hystrix.enabled=true 這個預設是false 需要手動開啟
user 中 application.properties 中
server.port=8763 eureka.client.service-url.defaultZone = http://localhost:8761/eureka/ spring.application.name=user spring.profiles.active=dev feign.hystrix.enabled=true
UserService 中 新增 fallback 失敗回撥
@FeignClient(value = "menu", fallback = UserServiceHystric.class)
程式碼如下:
package com.study.user.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
import java.util.Map;
@FeignClient(value = "menu", fallback = UserServiceHystric.class)
public interface UserService {
@RequestMapping(value="menu/getMenu")
List<Map<String, Object>> getMenu();
}
建立 UserServiceHystric 程式碼如下 需要實現 getMenu 方法
package com.study.user.service;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class UserServiceHystric implements UserService {
@Override
public List<Map<String, Object>> getMenu() {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("menu", "選單");
list.add(map);
return list;
}
}
再次訪問 http://127.0.0.1:8763/user/getMenu
容錯返回的內容可以根據我們實際情況,自己定義