博客
关于我
Spring cloud 之熔断机制(实战)
阅读量:396 次
发布时间:2019-03-05

本文共 2471 字,大约阅读时间需要 8 分钟。

Spring Cloud 熔断器实战

前言

在微服务架构中,分布式系统的复杂性导致了一系列挑战,其中最为棘手的问题便是“雪崩效应”。当一个微服务链路中的某个节点出现响应迟缓或故障时,会引发连锁反应,导致整个系统的性能严重下降甚至崩溃。为了应对这种风险,Spring Cloud 提供了一种强大的解决方案——熔断器机制。

熔断器机制概述

熔断器机制的核心作用是防止雪崩效应的发生。当一个微服务节点出现异常时,熔断器会自动中断该节点的调用,并向调用方返回一个预期的“合理”响应,从而避免长时间等待或异常处理。这种机制能够保护系统的稳定性,确保调用链路的健康运行。

实战配置与实现

在实际项目中,配置熔断器涉及以下几个关键步骤:

1. 引入相关依赖

首先,我们需要在项目中引入Spring Cloud 提供的熔断器相关组件:

org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.cloud
spring-cloud-starter-netflix-hystrix

2. 启用熔断器

在主类中,需要标注@EnableCircuitBreaker注解以启用熔断器功能:

@EnableCircuitBreakerpublic class OrderApp {    public static void main(String[] args) {        SpringApplication.run(OrderApp.class, args);    }}

此外,为了确保服务间的互联,还需要配置服务发现:

@EnableDiscoveryClientpublic class OrderApp {    // 其他配置...}

3. 实现熔断逻辑

在需要保护的接口中,使用@HystrixCommand注解并定义fallback方法:

@Overridepublic Response getUserInfo(HttpServletRequest req, HttpServletResponse res) {    try {        ResponseEntity
responseEntity = restTemplate.getForEntity(envConfig.getAdmin_web_url() + "/api/user/getUserInfo", String.class); if (responseEntity.getStatusCodeValue() == 200) { return Response.ok(responseEntity.getStatusCodeValue(), 0, "success", JSON.toJSON(responseEntity.getBody())); } } catch (Exception e) { logger.error("loadJobDetail error", e); } return null;}private Response
admin_service_fallBack(HttpServletRequest req, HttpServletResponse res) { String token = StrUtil.subAfter(req.getHeader("Authorization"), "bearer ", false); logger.info("admin_service_fallBack token: {}", token); return Response.ok(200, -2, "用戶服務掛啦!", null);}

需要注意的是,fallback方法的参数必须与原方法一致,否则会抛出错误:

com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException:fallback method wasn't found.

4. 配置Hystrix参数

为了优化熔断器的性能,可以通过配置参数来调整:

hystrix.command.BackendCall.execution.isolation.thread.timeoutInMilliseconds: 5000hystrix.threadpool.BackendCallThread.coreSize: 5

5. 调用方配置

被调用方(如用户管理服务)需要配置@EnableDiscoveryClient以确保服务可被发现和调用。

6. RestTemplate配置

确保RestTemplate是负载均衡的:

@LoadBalanced@Beanpublic RestTemplate restTemplate() {    // 其他配置...}

测试与验证

配置完成后,可以按照以下步骤进行测试:

  • 停止用户管理服务
  • 启动订单服务
  • 检查订单服务的调用是否返回熔断响应:
  • {    "message": {        "code": -2,        "message": "用戶服務掛啦!",        "status": 200    }}

    总结

    通过以上配置和实现,我们成功地在Spring Cloud项目中部署了熔断器机制。这一机制能够有效防止雪崩效应的发生,保障系统的稳定性和可靠性。熔断器的配置和使用需要结合实际场景进行调整,确保最佳的性能和可用性。

    转载地址:http://gmdzz.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL Point-In-Time Recovery (Incremental Backup)
    查看>>
    postgresql Streaming Replication监控与注意事项
    查看>>
    postgresql 不需要付费_使用数据传输在PostgreSQL执行 外部连接运算符
    查看>>
    postgresql 主从配置_生产环境postgresql主从环境配置
    查看>>
    postgresql 函数&存储过程 ; 递归查询
    查看>>
    PostgreSQL 分组聚合查询中 filter 子句替换 case when
    查看>>
    PostgreSQL 同步流复制锁瓶颈分析
    查看>>
    PostgreSQL 备份与还原命令 pg_dump
    查看>>
    Postgresql 外部表插件postgres_fdw的安装和使用
    查看>>
    PostgreSQL 如何从崩溃状态恢复(上)
    查看>>
    PostgreSQL 存储过程基本语法
    查看>>
    PostgreSQL 实现批量更新、删除、插入
    查看>>
    PostgreSQL 导入 .gz 备份文件
    查看>>
    PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
    查看>>
    PostgreSQL 新增数据返回自增ID
    查看>>
    postgresql 更新多列数据
    查看>>
    PostgreSQL 服务启动后停止
    查看>>
    PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
    查看>>
    PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
    查看>>
    Qt开发——简易调色板QPalette
    查看>>