java B2B2C電子商務平臺分析之十六----Zuul的容錯回退與高可用
zuul的容錯與回退
之前說到過,使用Hystrix實現微服務的容錯與回退,其實Zuul預設已經整合了Hystrix,使用起來也是比較簡單:
在原有 zuul-gateway 專案的基礎上新增,實現ZuulFallbackProvider介面,並實現getRoute和fallbackResponse方法。願意瞭解原始碼的朋友直接求求交流分享技術:二一四七七七五六三三
import com.google.gson.Gson; import com.simons.cn.util.CommonEnum; import com.simons.cn.util.CommonResult; import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; @Component public class UserProviderZuulFallBack implements ZuulFallbackProvider { private static final String USER_PROVIDER_SERVICE = "user-provider"; @Override public String getRoute() { return USER_PROVIDER_SERVICE; //返回你需要為哪個微服務提供回退 } @Override public ClientHttpResponse fallbackResponse() { return new ClientHttpResponse() { /** * 返回Http狀態碼標識 */ @Override public HttpStatus getStatusCode() throws IOException { return HttpStatus.OK; } /** * 返回Http狀態碼對應數字:200,詳見HttpStatus */ @Override public int getRawStatusCode() throws IOException { return 200; } /** *返回Http狀態碼對應中譯:OK,詳見HttpStatus */ @Override public String getStatusText() throws IOException { return HttpStatus.OK.getReasonPhrase(); } @Override public void close() { } /** *body響應體 */ @Override public InputStream getBody() throws IOException { String message = new Gson().toJson(CommonResult.success(CommonEnum.SERVICE_NOT_AVAILABLE.getCode(), CommonEnum.SERVICE_NOT_AVAILABLE.getMessage())); return new ByteArrayInputStream(message.getBytes("UTF-8")); } /** * 設定HttpHeaders */ @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); // MediaType mediaType = new MediaType("application/json;charset=utf-8"); //這是錯誤寫法 MediaType mediaType = new MediaType("application", "json", Charset.forName("utf-8")); headers.setContentType(mediaType); return headers; } }; } }
CommonEnum中的列舉(部分):
SERVICE_NOT_AVAILABLE("5001","當前服務不可用,請稍後重試!"),
測試:
啟動zuul-gateway專案和user-provider-eureka、discovery-eureka三個專案,瀏覽器訪問,效果如圖:
關閉user-provider-eureka服務,再訪問,效果如圖:
可以看到,當使用者微服務不可用時候,預設返回了自定義的json。
zuul的高可用策略
一、如果Zuul也註冊到了服務發現元件Eureka上,那麼zuul就已經實現了高可用配置,這種情況和普通的服務消費者和提供者的高可用是一致的;
二、若zuul未註冊到Eureka上,則可以透過Nginx/HAProxy等負載均衡器來將請求分配到zuul的其中一個節點;這點更多的還是負載均衡器的配置。例如nginx的:
整體程式碼結構如下:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31539957/viewspace-2284165/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java B2B2C電子商務平臺分析之十------服務閘道器zuulJavaZuul
- java B2B2C電子商務平臺分析之九--配置中心服務化和高可用Java
- java B2B2C電子商務平臺------服務閘道器zuulJavaZuul
- java B2B2C電子商務平臺分析之十五-----EureKa服務註冊與發現Java
- java B2B2C電子商務平臺分析之十四-----註冊中心 ConsulJava
- java B2B2C原始碼電子商務平臺Java原始碼
- java B2B2C電子商務平臺分析之七-Spring Cloud ConfigJavaSpringCloud
- java B2B2C電子商務平臺分析之八--配置中心svn示例和refreshJava
- java B2B2C springmvc mybatis電子商務平臺原始碼-------zuul閘道器實現JavaSpringMVCMyBatis原始碼Zuul
- SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(十)高可用的服務註冊中心SpringGCCloud微服務架構
- java B2B2C Springcloud電子商務平臺原始碼JavaSpringGCCloud原始碼
- 電子商務平臺 java b2b2c o2oJava
- java B2B2C電子商務平臺分析之十一------配置中心和訊息匯流排Java
- java B2B2C springmvc mybatis電子商務平臺原始碼JavaSpringMVCMyBatis原始碼
- java B2B2C springmvc mybatis多租戶電子商城系統--Zuul的高可用JavaSpringMVCMyBatisZuul
- spring cloud構建java版 b2b2c電子商務雲商平臺SpringCloudJava
- java原始碼 b2b2c o2o 電子商務平臺Java原始碼
- java B2B2C Springcloud電子商務平臺原始碼 -Feign之原始碼解析JavaSpringGCCloud原始碼
- 電子商務平臺b2b2c Springmvc+mybatisSpringMVCMyBatis
- java B2B2C原始碼電子商務平臺---大話Spring CloudJava原始碼SpringCloud
- java B2B2C原始碼電子商務平臺 ---搭建Eureka註冊中心Java原始碼
- (十四)JAVA springboot微服務b2b2c電子商務系統- Spring Cloud構建分散式電子商務平臺JavaSpring Boot微服務Cloud分散式
- java B2B2C springmvc mybatis電子商務平臺原始碼-訊息佇列之RocketMQJavaSpringMVCMyBatis原始碼佇列MQ
- 電子商務平臺 javaWeb b2b2c o2oJavaWeb
- 電子商務平臺 javaweb b2b2c o2oJavaWeb
- java B2B2C Springcloud電子商務平臺原始碼------Hystrix的快取使用JavaSpringGCCloud原始碼快取
- java B2B2C Springcloud電子商務平臺原始碼-RIBBON 核心設計和原理分析JavaSpringGCCloud原始碼
- java B2B2C原始碼電子商務平臺-配置中心svn示例和refreshJava原始碼
- java B2B2C springmvc mybatis電子商務平臺原始碼-Hystrix 基本配置JavaSpringMVCMyBatis原始碼
- java B2B2C Springcloud電子商務平臺原始碼-Ribbon 基本使用JavaSpringGCCloud原始碼
- SpringCloud微服務雲架構構建B2B2C電子商務平臺分析之-服務消費(Ribbon)SpringGCCloud微服務架構
- java B2B2C 仿淘寶電子商城系統-Spring Cloud構建分散式電子商務平臺JavaSpringCloud分散式
- 微服務雲架構電子商務平臺微服務架構
- java B2B2C Springboot電子商務平臺原始碼-Feign 基本使用JavaSpring Boot原始碼
- java B2B2C原始碼電子商務平臺 -----客戶端負載均衡策略Java原始碼客戶端負載
- java B2B2C springmvc mybatis電子商務平臺原始碼-Spring Cloud SecurityJavaSpringMVCMyBatis原始碼Cloud
- 關於SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(SpringGCCloud微服務架構
- SpringCloud微服務雲架構構建B2B2C電子商務平臺之-服務的註冊與發現EurekaSpringGCCloud微服務架構