返回顶部
首页 > 资讯 > 精选 >如何实现Zuul的容错回退与高可用
  • 600
分享到

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

2023-06-05 05:06:43 600人浏览 独家记忆
摘要

这篇文章主要介绍如何实现Zuul的容错回退与高可用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!zuul的容错与回退之前说到过,使用Hystrix实现微服务的容错与回退,其实Zuul默认已经整合了Hystrix,使用

这篇文章主要介绍如何实现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的容错回退与高可用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何实现Zuul的容错回退与高可用

本文链接: https://www.lsjlt.com/news/241357.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作