千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍如何实现Zuul的容错回退与高可用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!zuul的容错与回退之前说到过,使用Hystrix实现微服务的容错与回退,其实Z
千家信息网最后更新 2025年01月23日如何实现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安全错误 数据库的锁怎样保障安全 歇羽互联网科技有限公司 局域网文件管理服务器怎么搭建 中文学位论文数据库检索实验内容 网络安全法规定谁应当为公安机关 质量网络技术开发优缺点 数据库asm和表空间的区别 企业零售系统使用的数据库类型 浙江大学网络安全学院研究生招生 微信群群发软件开发 aworks软件开发 网络安全行业如何规范管理 数据统计连接到数据库技术中 丰台二手服务器回收门店 软件开发网站模版 网络安全责任辩论 informa数据库讲解 网络安全演讲模板 三级计算机网络技术激活码 逃离塔科夫建服务器链接 传感器网络技术东南大学 视频录制软件开发原理 区网络安全宣传周工作总结 太仓工业无线串口服务器 亲家网络技术好吗 杭州知租侠网络技术有限公司 数据库中安全性保证的几种方法 软件开发是需要数学好的吗 网络安全省部级奖 第12章面向方面的软件开发 廊坊市乐乐虫网络技术有限公司
0