热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springcloud快速入门教程(七)服务断路器Hystrix

当微服务挂掉了怎么办?从用户体验的角度来讲,应该给一个服务切换不影响使用为最佳,或者在一些秒杀秒杀活动中可以跳转到排队等待页面,最差也要给个提示,不可以留个报错页面给客户,springclou

当微服务挂掉了怎么办?从用户体验的角度来讲,应该给一个服务切换不影响使用为最佳,或者在一些秒杀秒杀活动中可以跳转到排队等待页面,最差也要给个提示,不可以留个报错页面给客户,spring cloud就为我们提供一个断路器Hystrix,专门处理某个服务挂掉了如何善后的问题。

再复用userService,添加依赖包


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


org.springframework.cloud
spring-cloud-starter-hystrix-dashboard
hystrix-dashboard是hystrix的监控后台,各位可以自行查询相关资料,这里不重点介绍

Hystrix在RestTemplate和Feign中用法不同,所以分别做介绍,启动程序中加入Hystrix的注解

package com.tzy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrix
@EnableHystrixDashboard
public class Main {
public static void main(String[] args){
SpringApplication.run(Main.class,args);
}

@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
@EnableHystrix是必不可少的,表示该应用使用Hystrix

先说在RestTemplate中的使用,以远程调用service-product服务的getProduct方法为例,

package com.tzy.userService;

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;

@Service
public class GetProductService {
@Autowired
RestTemplate restTemplate;

@HystrixCommand(fallbackMethod = "getGoodsError")
public String getGoods(){
return restTemplate.getForObject("http://service-product/getProduct",String.class);
}

public String getGoodsError(){
return "getGoodsService进程间调用异常!";
}
}

@HystrixCommand注解中的fallbackMethod所指向的方法是如果下面的远程调用出现异常,比如service-product服务挂掉了,就会回调getGoodsError方法中的内容返回给请求者

可以把service-product关掉测试试一下,是可以拿到异常反馈内容的。


Hystrix和Feign的集成要更加好一些,仍以远程调用service-product服务的getProduct方法为例,复用上一节我们创建的接口,新建一个对象实现该接口

package com.tzy.userService;

import org.springframework.stereotype.Component;

@Component
public class GetGoodsHystrix implements GetProductInterface{
@Override
public String getProduct(){
return "GetProductInterface接口调用失败";
}
}

重写方法中写的是远程调用失败的异常处理,在接口里要加上Hystrix的回调内容:

package com.tzy.userService;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(value = "service-product",fallback = GetGoodsHystrix.class)
public interface GetProductInterface {
@RequestMapping(value = "/getProduct")
String getProduct();
}

只需在@FeignClient的方法里加入要回调的对象即可,即fallback=GetGoodsHystrix。接下来我们就复用以前的Controller来测一下,关掉service-product服务。

package com.tzy.userService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GetProductController {

@Autowired
GetProductInterface getProductInterface;

@RequestMapping(value = "/getGoods")
public String getGoods(){
return getProductInterface.getProduct();
}
}

最终也能得到正确的异常反馈。

会用这几章介绍的spring cloud组件,基本上就可以开发最基础的微服务系统了,当然还有很多的东西要学,这一套东西极大地简化了配置,主要思想是默认大于配置,只要是你能想得到的地方都可以配置,他只是把常用的暴露给你,让开发人员把精力都放在开发上,非常好用,再加上spring-data去操作关系型数据库和费关系型数据库,就算重新架构项目也比用ssm框架开发的周期要短,但还是建议新项目用spring cloud开发,我们的情况是不得已而为之,说了这么多spring cloud的好话,他的缺点也要讲清楚,目前spring cloud只支持java,我最近在研究nodejs,他的事件驱动和异步IO的确很强大,无法融入spring cloud的体系,希望以后spring cloud可以对接更多的平台。





推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
author-avatar
丶Olrickx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有