我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何实现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() {                        @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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

如何使用MySQL的复制功能实现高可用性和容错性?

如何使用MySQL的复制功能实现高可用性和容错性?随着互联网的快速发展,数据库的高可用性和容错性变得越来越重要。MySQL是一种广泛使用的开源关系型数据库,它的复制功能可以帮助我们实现数据库的高可用性和容错性。在本文中,我们将介绍如何使用M
2023-10-22

如何在PostgreSQL中实现高可用和容灾方案

在PostgreSQL中实现高可用和容灾方案通常需要使用主从复制和故障切换机制。以下是一些常用的方法:主从复制:通过设置一个主数据库和多个从数据库,实现数据的复制和同步。当主数据库发生故障时,可以切换到从数据库进行读写操作,保证系统的可用性
如何在PostgreSQL中实现高可用和容灾方案
2024-04-09

Xunsearch搜索的容错与故障恢复策略(Xunsearch搜索如何保障高可用性和容错性?)

Xunsearch搜索引擎通过故障诊断、冗余部署、自动故障切换、数据同步和灾难恢复等机制保障高可用性。冗余部署和自动故障切换确保一个节点故障时无缝接管服务,而数据同步和索引分区保证数据完整性。灾难恢复机制支持从备份恢复数据,以应对严重灾难。Xunsearch的容错机制考虑了性能开销,使用高效同步协议和分布式缓存,最大限度地减少对搜索性能的影响,从而保障稳定可靠的搜索服务。
Xunsearch搜索的容错与故障恢复策略(Xunsearch搜索如何保障高可用性和容错性?)
2024-04-02

Cassandra是如何实现高可用性的

Cassandra实现高可用性的方式包括以下几点:分布式架构:Cassandra采用分布式架构,数据被分布在多个节点上,每个节点都包含完整的数据副本。这样即使某个节点出现故障,其他节点仍然可以继续提供数据服务。数据复制:Cassandra通
Cassandra是如何实现高可用性的
2024-03-06

Kafka高可用性是如何实现的

Kafka 高可用性是通过以下几种方式来实现的:复制机制:Kafka 使用复制机制来保证数据的可靠性和高可用性。每个分区都可以配置多个副本,这些副本分布在不同的 Broker 上,当主副本出现故障时,可以自动选举一个新的主副本来接替原来的主
Kafka高可用性是如何实现的
2024-03-12

如何在go语言中实现高可用的系统设计与实现

要在Go语言中实现高可用的系统设计与实现,可以遵循以下步骤:1. 设计分布式系统架构:首先,需要设计一个可扩展的分布式系统架构。这包括确定系统的组成部分、模块和它们之间的交互方式,以及如何处理故障和故障恢复。2. 实现故障检测和恢复机制:为
2023-10-12

Oracle RAC 如何实现高可用性与性能扩展

Oracle RAC(Real Application Clusters)是Oracle数据库的一种高可用性和性能扩展架构,能够将多台服务器组合成一个集群,共享存储和处理能力,从而提高数据库系统的可用性和性能。本文将介绍Oracle RAC
Oracle RAC 如何实现高可用性与性能扩展
2024-03-07

如何使用服务器容器编排工具实现高可用性

服务器容器编排工具可以帮助您管理和协调多个服务器容器,从而实现应用程序的高可用性。本文将介绍如何使用 Kubernetes 和 Docker Swarm 等服务器容器编排工具来实现高可用性。
如何使用服务器容器编排工具实现高可用性
2024-02-09

mairadb+galera+haproxy+keepalived如何实现mysql负载均衡与高可用

这篇文章主要介绍了mairadb+galera+haproxy+keepalived如何实现mysql负载均衡与高可用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:服务器
2023-06-04

Elasticsearch分布式搜索的高可用性设计与实现(如何设计并实现Elasticsearch分布式搜索的高可用性?)

Elasticsearch分布式搜索的高可用性设计采用分片、副本、主从复制和集群拓扑等机制。高可用性实现包括健康检查、自动故障转移、数据同步和快照还原。最佳实践建议使用多个数据中心、负载平衡器和定期监视。通过这些措施,Elasticsearch可确保即使节点故障,数据和服务仍可用,实现高可用性的分布式搜索解决方案。
Elasticsearch分布式搜索的高可用性设计与实现(如何设计并实现Elasticsearch分布式搜索的高可用性?)
2024-04-02

如何利用Redis实现分布式锁的高可用

如何利用Redis实现分布式锁的高可用,需要具体代码示例一、引言在分布式系统中,由于多个进程或线程可以同时访问共享资源,会带来资源竞争的问题。为了解决这个问题,需要引入分布式锁来进行资源的互斥访问。Redis作为一种内存数据库,提供了分布式
如何利用Redis实现分布式锁的高可用
2023-11-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录