springcloud费话之断路器(hystrix in feign)

目录:

springcloud费话之Eureka基础

springcloud费话之Eureka集群

springcloud费话之Eureka服务访问(restTemplate)

springcloud费话之Eureka接口调用(feign)

springcloud费话之断路器(hystrix in feign)

使用eureka服务发现实现服务器之间的http访问(feign)并添加断路器hystrix

断路器,是springcloud中的一种熔断机制的实现方式

熔断机制,是达到了某个异常以后,后续判断不进行,直接否定的一种方式,类似于&&或者||的熔断的感觉

因为服务器之间的调用,判断错误链,以及出现问题以后的回调,时间可能会很长,如果不尽快阻止,

很可能导致很多请求都等待几十秒的超时而造成服务器阻塞,进而造成服务器崩溃

因此熔断机制十分重要

在springcloud的熔断机制,叫做Spring Cloud Circuit Breaker

具体使用的是hystrix断路器

具体使用方式和流程如下

1.依赖

在springcloud官方网站中找到断路器()的依赖,如下图,并导入pom

2.在启动类添加注解

在启动类添加注解@EnableHystrix,添加后代码如下:

package com.lyh.lyh_eureka_server;

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

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class EurekaClientRun {

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

}

3.在请求方法上添加熔断注解,并指定熔断的方法,具体代码如下:

熔断注解@HystrixCommand(fallbackMethod = "errorBreak"),其中的fallbackMethod为要调用的熔断的方法

package com.lyh.lyh_eureka_server.controller;

import java.net.URI;
import java.net.URISyntaxException;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.lyh.lyh_eureka_server.Interface.FeignService;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.ribbon.proxy.annotation.Hystrix;

@RestController
@EnableEurekaClient
public class TestController {

    @Autowired
    private EurekaClient eurekaClient;

    @Resource
    private FeignService feignService;

    @RequestMapping("/getServerInfo")
    public Object getServerInfo() {
        // 通过eurekaClient访问服务器获取某个命名的集群。
        // getNextServerFromEureka的第一个参数是服务器名称,可重复
        // 因为获得的是下一个,所以是负载均衡的
        InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false);
        System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort());
        return nextServerFromEureka;
    }

    // 触发的接口
    @RequestMapping("/getInfoFromClient")
    @HystrixCommand(fallbackMethod = "errorBreak")
    public Object getInfoFromClient() throws URISyntaxException {
        InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false);
        System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort());
        RestTemplate restTemplate = new RestTemplate();
        String u = "http://" + nextServerFromEureka.getIPAddr() + ":" + nextServerFromEureka.getPort() + "/getInfo";
        URI uri = new URI(u);
        String obj = restTemplate.getForObject(uri, String.class);
        System.out.println(obj.toString());
        return obj;
    }

    // 接口访问的服务 添加熔断方法errorBreak
    @RequestMapping("/getInfo")
    @HystrixCommand(fallbackMethod = "errorBreak")
    public Object getInfo() {
        return "I am info from client 9020";
    }

    // 触发的接口 by feign 添加熔断方法errorBreak
    @RequestMapping("/getInfoFromClientByFeign")
    @HystrixCommand(fallbackMethod = "errorBreak")
    public Object getInfoFromClientByFeign() throws Exception {
        // 测试熔断效果
        // System.out.println(1/0);
        String obj = feignService.getInfo();
        System.out.println(obj.toString());
        return obj;
    }

    //hystrix熔断调用的方法
    public String errorBreak() {
        return "this is error break by hystrix";
    }

}

4.测试

后端并没有报错,前端返回了该熔断效果

原文地址:https://www.cnblogs.com/liuyuhangCastle/p/11397265.html

时间: 2024-10-07 12:37:28

springcloud费话之断路器(hystrix in feign)的相关文章

springcloud入门之断路器Hystrix(四)

什么是断路器 断路器模式源于Martin Fowler的Circuit Breaker一文."断路器"本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,"断路器"能够及时的切断故障电路,防止发生过载.发热.甚至起火等严重后果. 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因调用故障服务被长时间

springcloud费话之Eureka接口调用(feign)

目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud费话之Eureka接口调用(feign) springcloud费话之断路器(hystrix in feign) springcloud费话之配置中心基础(SVN) 使用eureka服务发现实现服务器之间的http访问(feign) 使用restTemplate的访问方式还是比较复杂的,需要对其中的

SpringCloud学习系列之三----- 断路器Hystrix和断路器监控Dashboar

前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netflix创建了一个名为Hystrix的库,它实现了断路器模式.主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线. 开发准备 开发环境 JDK:1.8 SpringBoot:2.1.1.RELEASE SpringCloud:Finchley 注:不一定非要用上述的版本,可以根据

12、Feign整合断路器Hystrix

公众号: java乐园 上编说了<RestTemplate+Ribbon整合断路器Hystrix>,这篇来看看如何Feign整合断路器Hystrix,Feign整合断路器Hystrix也是相对比较简单的.Feign默认已经自带断路器Hystrix,所以不需要像RestTemplate+Ribbon整合断路器Hystrix那样需要在SpringBoot的启动类添加注解.但是Feign自带断路器并没有打开,需要做些额外的配置. feign: hystrix: enabled: true 1. 新建

springcloud费话之Eureka集群

  目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud费话之Eureka接口调用(feign) springcloud费话之断路器(hystrix in feign) 一.容灾server集群 复制上例中的server项目两个,分别命名为x-server2和x-server3,修改yml配置 ①端口:三个服务器的端口分别为9010,9011,901

springcloud费话之Eureka服务访问(restTemplate)

目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud费话之Eureka接口调用(feign) springcloud费话之断路器(hystrix in feign) springcloud费话之配置中心基础(SVN) 完成了Eureka的服务器集群的搭建后,需要相互调用访问,该访问主要分为两种内容的请求 ①对集群中的所有客户端的注册信息请求 ②对集群

springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

参考:springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin 原创 2017年09月18日 11:46:28 标签: 微服务架构 / 微服务组件 / eureka / ribbon / zuul 26459 springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin 相信现在

SpringCloud断路器Hystrix全面解析

在微服务场景中,通常会有很多层的服务调用.如果一个底层服务出现问题,故障会被向上传播给用户.我们需要一种机制,当底层服务不可用时,可以阻断故障的传播.这就是断路器的作用.他是系统服务稳定性的最后一重保障. 在springcloud中断路器组件就是Hystrix.Hystrix也是Netflix套件的一部分.他的功能是,当对某个服务的调用在一定的时间内(默认10s,由metrics.rollingStats.timeInMilliseconds配置),有超过一定次数(默认20次,由circuitB

【广州】springcloudの核心组件Eureka、Ribbon、Feign、Hystrix、...

springcloudの核心组件Eureka.Ribbon.Feign.Hystrix.Zuul 看了一篇关于springcloud核心组件的实例讲解,分析的简单透彻,更好的明白组件间的关系,记录下来. 各个组件角色扮演: Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里 Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个