SpringCloud 基础教程(五) 服务熔断机制(Eureka + Ribbon + Hystrix)

1、启动【服务中心】集群,即 Eureka Server

参考 SpringCloud 基础教程(一) 服务中心及集群(Eureka Server)

2、启动【服务提供者】集群,即 Eureka Client

参考 SpringCloud 基础教程(二) 服务注册及集群(Eureka Client)

3、启动【服务消费者】,即 Eureka Discovery Client

参考 SpringCloud 基础教程(三) 服务发现及负载均衡(Eureka Discovery Client + Ribbon)

4、未加入熔断机制,【服务提供者】出现问题,对【服务消费者】的影响

4.1、停掉【服务提供者】集群中的其中一个服务。本例:停掉端口为 52602 这个服务。

4.2、开浏览器窗口,访问 http://localhost:52610/ribbonInfo,多次刷新该地址

调用 52601、52603 服务是正常的,但是调用52602服务的时候,出现了阻塞等待,并最终返回了红框内的错误信息。

假如这是正式的生产环境,访问量很大的情况下,那么就会有很多请求阻塞。这会造成【服务消费者】服务器内存消耗陡增,导致应用崩溃。如果有其他应用需要【服务消费者】返回资源信息,那么调用【服务消费者】的应用也会出现阻塞。这就导致了连锁反应,也就是所谓的雪崩。

所以,为了避免这种悲剧发生。顺应而生的出现了熔断保护机制。即:访问不通时,要及时作出响应,而不是等待至超时。

5、修改【服务消费者】,加入熔断机制

5.1、打开工程:springcloud-eureka-ribbon

5.2、工程pom.xml文件添加如下依赖:

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

5.3、修改工程启动类中,添加注解 @EnableHystrix

package com.miniooc.eurekaribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;

/**
 * EurekaRibbonApplication
 * 应用程序启动类,程序入口
 *
 * @author 宋陆
 * @version 1.0.0
 */
@EnableHystrix // 启用 hystrix 熔断机制相关配置
@EnableDiscoveryClient // 启用 Eureka 服务发现 相关配置
@SpringBootApplication
public class EurekaRibbonApplication {

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

}

5.4、修改服务消费者 Service 类, EurekaRibbonService

package com.miniooc.eurekaribbon.service;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * EurekaRibbonService
 * 服务消费者服务类,调用服务提供者提供的服务,实现业务
 *
 * @author 宋陆
 * @version 1.0.0
 */
@Service
public class EurekaRibbonService {

    @Autowired
    RestTemplate restTemplate;

    /**
     *  加入了@HystrixCommand注解,并设置了服务调用失败的回调方法 fallbackMethod = "getInfoFailure"
     * @return
     */
    @HystrixCommand(fallbackMethod = "getInfoFailure")
    public String getInfo() {
        String message;
        try {
            System.out.println("调用 服务 EUREKA-CLIENT/info");
            message = restTemplate.getForObject("http://EUREKA-CLIENT/info", String.class);
            System.out.println("服务 EUREKA-CLIENT/info 返回信息 : " + message);
            System.out.println("调用 服务 EUREKA-CLIENT/info 成功!");
        } catch (Exception ex) {
            message = ex.getMessage();
        }
        return message;
    }

    /**
     * 服务 EUREKA-PROVIDER/hello 调用失败的回调方法
     *
     * @return
     */
    public String getInfoFailure() {
        String message = "网络繁忙,请稍后再试-_-。PS:服务消费者自己提供的信息";
        return message;
    }

}

6、加入熔断机制后,【服务提供者】出现问题,对【服务消费者】的影响

6.1、重启【服务提供者】集群,重启【服务消费者】

6.2、停掉【服务提供者】集群中的其中一个服务。本例:停掉端口为 52602 这个服务。

6.3、开浏览器窗口,访问 http://localhost:52610/ribbonInfo,多次刷新该地址

调用 52601、52603 服务是正常的,调用52602服务的时候,没有出现阻塞等待,而是返回了【服务消费者】自己提供的返回信息

【服务消费者】加入熔断机制结束


SpringCloud 基础教程 课程目录

SpringCloud 基础教程(开篇) SpringCloud概述

SpringCloud 基础教程(一) 服务中心及集群(Eureka Server)

SpringCloud 基础教程(二) 服务注册及集群(Eureka Client)

SpringCloud 基础教程(三) 服务发现及负载均衡(Eureka Discovery Client + Ribbon)

SpringCloud 基础教程(四) 服务发现及负载均衡(Eureka Discovery Client + Feign)

SpringCloud 基础教程(五) 服务熔断机制(Eureka + Ribbon + Hystrix)

原文地址:https://www.cnblogs.com/songlu/p/9949203.html

时间: 2024-10-09 03:19:35

SpringCloud 基础教程(五) 服务熔断机制(Eureka + Ribbon + Hystrix)的相关文章

SpringCloud 基础教程(二) 服务注册(Eureka Client)

1.创建[服务提供者],即 Eureka Client 1.1.新建 Spring Boot 工程,工程名称:springcloud-eureka-client 2.2.工程 pom.xml 文件添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependen

平面设计 计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

利用Spring Cloud实现微服务- 熔断机制

1. 熔断机制介绍 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服务组成,微服务之间的数据交互通过远程过程调用完成.这就带来一个问题,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"扇出".如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的&

SpringCloud服务发现注册Eureka +Ribbon + Feign

在本期将学习以下知识点: 什么是服务注册和发现? 基于Eureka的注册服务器 服务生产者 结合Ribbon服务消费者 结合Feign的服务生产者和消费者 什么是服务注册和发现 假设有2个微服务A和B分别在端点http:// localhost:8181 /和http:// localhost:8282 /上运行,如果想要在A服务中调用B服务,那么我们需要在A服务中键入B服务的url,这个url是负载均衡器分配给我们的,包括负载平衡后的IP地址,那么很显然,B服务与这个URL硬编码耦合在一起了,

Spring Cloud 入门教程(七): 熔断机制 -- 断路器

对断路器模式不太清楚的话,可以参看另一篇博文:断路器(Curcuit Breaker)模式,下面直接介绍Spring Cloud的断路器如何使用. SpringCloud Netflix实现了断路器库的名字叫Hystrix. 在微服务架构下,通常会有多个层次的服务调用. 下面是微服架构下, 浏览器端通过API访问后台微服务的一个示意图: 一个微服务的超时失败可能导致瀑布式连锁反映,下图中,Hystrix通过自主反馈实现的断路器, 防止了这种情况发生. 图中的服务B因为某些原因失败,变得不可用,所

cocos基础教程(11)事件分发机制

cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种: 触摸事件 (EventListenerTouch) 键盘响应事件 (EventListenerKeyboard) 鼠标响应事件 (EventListenerMouse) 自定义事件 (EventListenerCustom) 加速记录事件 (EventListenerAcceleration)

思达报表工具Style Report基础教程-五步创建一个报表

一.连接数据源1)建立数据源连接打开报表设计器  首先选择新建数据源,输入合适的数据源名称. 然后在数据源向导中填写有关JDBC URL和用户名等信息.  点击完成保存新建的数据源,点击测试连接按钮测试新建的数据源,如果信息填写正确则会出现测试成功的信息提示,这时就可以开始建立数据查询了.  2)建立查询新建一个查询并在界面中输入合适的SQL语句.  点击预览tab可以看到数据库中查询出来的数据,如果可以正常查询则可以开始制作报表. 二.新建报表数据源连接完成后,选择 文件菜单->新建->报表

计算机基础教程 汽车服务 张旭