文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-05 05:19

关注

这篇文章主要介绍如何实现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() {                        @Override            public HttpStatus getStatusCode() throws IOException {                return HttpStatus.OK;            }                         @Override            public int getRawStatusCode() throws IOException {                return 200;            }                         @Override            public String getStatusText() throws IOException {                return HttpStatus.OK.getReasonPhrase();            }             @Override            public void close() {             }                         @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"));            }                         @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,效果如图:

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

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

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

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

zuul的高可用策略

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

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

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯