千家信息网

如何实现Zuul的容错回退与高可用

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍如何实现Zuul的容错回退与高可用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!zuul的容错与回退之前说到过,使用Hystrix实现微服务的容错与回退,其实Z
千家信息网最后更新 2025年12月03日如何实现Zuul的容错回退与高可用

这篇文章主要介绍如何实现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; @Componentpublic 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三个项目,浏览器访问http://localhost:10010/user/getuserinfo?name=jack,效果如图:

关闭user-provider-eureka服务,再访问http://localhost:10010/user/getuserinfo?name=jack,效果如图:

可以看到,当用户微服务不可用时候,默认返回了自定义的json。

zuul的高可用策略

一、如果Zuul也注册到了服务发现组件Eureka上,那么zuul就已经实现了高可用配置,这种情况和普通的服务消费者和提供者的高可用是一致的;

二、若zuul未注册到Eureka上,则可以通过Nginx/HAProxy等负载均衡器来将请求分配到zuul的其中一个节点;这点更多的还是负载均衡器的配置。例如nginx的:

以上是"如何实现Zuul的容错回退与高可用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

服务 容错 状态 项目 均衡 内容 效果 更多 篇文章 均衡器 如图 配置 普通 一致 三个 价值 兴趣 写法 可以通过 基础 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 我的世界主流的起床战争服务器 数学教人软件开发 江阴网络软件开发销售电话 红辣椒网络安全吗 图片以路径存储数据库的app 数据库的索引是从几开始 搞软件开发没有思路怎么办 魔兽世界新服务器怎么连接 为什么都是安卓系统服务器不一样 戴尔服务器关机后自动启动 沈阳酒店软件开发公司 企业存储服务器配置 如何学好网络技术基础 关于网络安全法的正确说法有 2018典型网络安全事件 我的世界日服2b2t服务器地址 透明时代网络安全演讲稿 东城区正规软件开发价格信息 互联网和网络安全的关系 如何启动web服务器 戴尔服务器管理口插上没反应 集团资金系统 网络安全建设 服务器出现了问题什么办 服务器的服务商 群星服务器联机 怎么做网络安全工作 河北专科软件开发哪个学校好 华为弹性云服务器登录 大专生网络技术安全开题报告 权限管理 数据库设计
0