首页 > 其他分享 >Spring Cloud Hystrix

Spring Cloud Hystrix

时间:2024-01-10 14:11:28浏览次数:32  
标签:web Hystrix Spring springframework public import org annotation Cloud

在Spring Cloud中使用了Hystrix来实现断路器的功能。Hystrix是Netflix开源的微服务框架套件之一,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。

1 . Ribbon中的配置 : 添加依赖 pom.xml :
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2 . 修改ComputeService
package com.wuxicloud.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;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-28 13:56
 */
@Service
public class ComputeService {
    @Autowired
    RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "addServiceFallBack")  //fallbackMethod方法指定回调方法
    public String addService() {
        return restTemplate.getForEntity("http://SPRINGCLOUD-HELLOWORLD-SERVICE/add?a=10&b=20", String.class).getBody();
    }
    public String addServiceFallBack() {
        return "error";
    }
}
3 . 在eureka-ribbon的主类RibbonApplication中使用@EnableCircuitBreaker注解开启断路器功能
package com.wuxicloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-27 16:01
 * @EnableDiscoveryClient 注解来添加发现服务能力
 * @EnableCircuitBreaker 开启断路器功能
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class RibbonApplication {
    /**
     * 创建RestTemplate实例
     * @LoadBalanced 此注解开启负载均衡能力
     */
    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run (RibbonApplication.class, args);
    }
}
4 . 改造原来的服务消费方式,新增ComputeService类,在使用ribbon消费服务的函数上增加@HystrixCommand注解来指定回调方法。
package com.wuxicloud.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;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-28 13:56
 */
@Service
public class ComputeService {
    @Autowired
    RestTemplate restTemplate;
//fallbackMethod方法指定回调方法
    @HystrixCommand(fallbackMethod = "addServiceFallBack")  
    public String addService() {
        return restTemplate.getForEntity("http://SPRINGCLOUD-HELLOWORLD-SERVICE/add?a=10&b=20", String.class).getBody();
    }
    public String addServiceFallBack() {
        return "error";
    }
}
5 . 提供rest接口的Controller改为调用ComputeService的addService:
package com.wuxicloud.web;
import com.wuxicloud.service.ComputeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-27 16:12
 */
@RestController
public class ConsumerController {
    @Resource
    ComputeService computeService;
    @Autowired
    RestTemplate restTemplate;
    @RequestMapping(value = "/add", method = RequestMethod.GET )
    public String add() {
        return computeService.addService();
    }
}
6 . 关闭compute-service服务后再访问http://localhost:3333/add,页面显示:error
Feign使用Hystrix ,使用@FeignClient注解中的fallback属性指定回调类 :
package com.wuxicloud.service;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-27 16:49
 * @FeignClient : 绑定该接口对应的服务,fallback是请求失败的回调类
 */
@FeignClient(value = "SpringCloud-HelloWorld-service", fallback = ComputeClientHystrix.class)
public interface ComputeService {
    // 请求参数和服务方法的请求参数名字相同
    @RequestMapping(method = RequestMethod.GET , value = "/add")
    Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b);
}
创建回调类,并实现ComputeService :
package com.wuxicloud.service;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * #Author : EalenXie
 * #CreateTime : 2017-04-28 14:54
 */
@Component
public class ComputeClientHystrix implements ComputeService {
    @Override
    public Integer add(@RequestParam(value = "a") Integer a, @RequestParam(value = "b") Integer b) {
        return -9999;
    }
}
再用之前的方法验证一下,是否在compute-service服务不可用的情况下,页面返回了-9999。

标签:web,Hystrix,Spring,springframework,public,import,org,annotation,Cloud
From: https://www.cnblogs.com/ealenxie/p/17956372

相关文章

  • SpringBoot WebSocket 样例
    SpringBootWebSocket样例pom.xml依赖配置<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>javax.webso......
  • jasypt-spring-boot 配置文件加密样例
    jasypt-spring-boot配置文件加密样例首先引入pom.xml<!--低版本的jdk(如1.8.0_25-b18)中会出现Failedtobindpropertiesunder'xxx'tojava.lang.String,不会在高版本的jdk(如1.8.0_161)运行环境中出现;原因:加密引发异常。原因是您正在使用强加密算法,并且您尚未在此Java......
  • 对比Spring Boot中的JdbcClient与JdbcTemplate
    本文我们一起看看SpringBoot中JdbcClient和JdbcTemplate之间的差异。以下内容使用的Java和SpringBoot版本为:Java21SpringBoot3.2.1假设我们有一个ICustomerService接口:publicinterfaceICustomerService{List<Customer>getAllCustomer();Optio......
  • 8、SpringBoot2之打包及运行
    为了演示高级启动时动态配置参数的使用,本文在SpringBoot2之配置文件的基础上进行8.1、概述普通的web项目,会被打成一个war包,然后再将war包放到tomcat的webapps目录中;当tomcat启动时,在webapps目录中的war包会自动解压,此时便可访问该web项目的资源或服务;因为......
  • Spring Boot2.x 优雅停机 Graceful Shutdown
    参考https://www.jianshu.com/p/199e419c025ehttps://blog.csdn.net/u014643282/article/details/116004816gpt注意SpringBoot还支持关闭事件监听,在监听事件内可以编写代码实现关闭前的清理工作。环境环境版本说明Windows10VSCode1.85.1Spring......
  • 基于SpringBoot+Vue的流浪动物领养信息系统设计实现(源码+lw+部署文档+讲解等)
    (文章目录)前言:heartpulse:博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌:heartpulse:......
  • Spring MVC 源码分析 - ViewResolver 组件
    ViewResolver组件ViewResolver 组件,视图解析器,根据视图名和国际化,获得最终的视图View对象回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 ViewResolver 组件,可以回到《一个请求的旅行过程》中的 DispatcherServlet 的 render 方法中看看,如下:prote......
  • 浅谈spring-retry
    使用方法@ComponentpublicclassRetryableXX{ //使用重试框架须知: //该注解无事务性!!!! //该注解是同步操作,重试次数与时间间隔需要慎重考虑!!!! //使用重试注解时,务必匹配@Recover回调方法,否则重试次数会平方!!!! //被调用的重试方法必须是被代理过的,否则重试效果不生效!!!! //匹......
  • SpringBoot集成WebSocket实现消息推送
    一、前言WebSocket是一种新型的通信协议,它可以在客户端和服务端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。它是一种基于TCP协议实现的全双工通信协议,使用它可以实现实时通信,不必担心HTTP协议的短连接问题。SpringBoot可以很方便的集成WebSocket实现高效实时的......
  • #星计划# 在OpenHarmony上使用网络组件axios与Spring Boot进行前后端交互
    在OpenHarmony上使用网络组件axios与SpringBoot进行前后端交互#jitoa#此博客由金陵科技学院-开放原子开源社李俊杰编写仓库地址:axiosTest·AtomGit_开放原子开源基金会代码托管平台结果演示:在OpenHarmony上使用网络组件axios与SpringBoot进行前后端交互_哔哩哔哩_bilib......