Spring Cloud对Hystrix的支持

Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持。 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章。 在这里,我将探讨如何将Hystrix与Spring Cloud结合使用

基本

实际上并没有什么大不了的,这些概念仅在特定于Spring引导的增强中保留下来。 考虑一个简单的Hystrix命令,该命令包含对Remote服务的调用:

import agg.samples.domain.Message;
import agg.samples.domain.MessageAcknowledgement;
import agg.samples.feign.RemoteServiceClient;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class RemoteMessageClientCommand extends HystrixCommand<MessageAcknowledgement> {private static final String COMMAND_GROUP = "demo";private static final Logger logger = LoggerFactory.getLogger(RemoteMessageClientCommand.class);private final RemoteServiceClient remoteServiceClient;private final Message message;public RemoteMessageClientCommand(RemoteServiceClient remoteServiceClient, Message message) {super(HystrixCommandGroupKey.Factory.asKey(COMMAND_GROUP));this.remoteServiceClient = remoteServiceClient;this.message = message;}@Overrideprotected MessageAcknowledgement run() throws Exception {logger.info("About to make Remote Call");return this.remoteServiceClient.sendMessage(this.message);}@Overrideprotected MessageAcknowledgement getFallback() {return new MessageAcknowledgement(message.getId(), message.getPayload(), "Fallback message");}
}

这里没有与Spring相关的类,此命令可以直接在基于Spring的项目中使用,例如在控制器中以下列方式使用:

@RestController
public class RemoteCallDirectCommandController {@Autowiredprivate RemoteServiceClient remoteServiceClient;@RequestMapping("/messageDirectCommand")public MessageAcknowledgement sendMessage(Message message) {RemoteMessageClientCommand remoteCallCommand = new RemoteMessageClientCommand(remoteServiceClient, message);return remoteCallCommand.execute();}
}

Hystrix命令的行为自定义通常是通过NetflixOSS Archaius属性执行的,但是Spring Cloud提供了一个桥梁,使Spring定义的属性显示为Archaius属性,这简而言之意味着我可以使用Spring特定的配置文件来定义我的属性,自定义命令行为时将可见。

因此,如果较早进行自定义,则可以使用Archaius属性来表示HelloWorldCommand的行为,如下所示:

hystrix.command.HelloWorldCommand.metrics.rollingStats.timeInMilliseconds=10000
hystrix.command.HelloWorldCommand.execution.isolation.strategy=THREAD
hystrix.command.HelloWorldCommand.execution.isolation.thread.timeoutInMilliseconds=1000
hystrix.command.HelloWorldCommand.circuitBreaker.errorThresholdPercentage=50
hystrix.command.HelloWorldCommand.circuitBreaker.requestVolumeThreshold=20
hystrix.command.HelloWorldCommand.circuitBreaker.sleepWindowInMilliseconds=5000

这可以在Spring Cloud世界中以完全相同的方式在application.properties文件或application.yml文件中通过以下方式完成:

hystrix:command:HelloWorldCommand:metrics:rollingStats:timeInMilliseconds: 10000execution:isolation:strategy: THREADthread:timeoutInMilliseconds: 5000circuitBreaker:errorThresholdPercentage: 50requestVolumeThreshold: 20sleepWindowInMilliseconds: 5000

基于注释的方法

我个人更喜欢基于直接命令的方法,但是在Spring世界中使用Hystrix的更好方法可能是使用基于hystrix-javanica的注释。 最好通过一个示例说明如何使用此注释。 这是包装在Hystrix命令中并带有注释的远程调用:

import agg.samples.domain.Message;
import agg.samples.domain.MessageAcknowledgement;
import agg.samples.feign.RemoteServiceClient;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class RemoteMessageAnnotationClient  {private final RemoteServiceClient remoteServiceClient;@Autowiredpublic RemoteMessageAnnotationClient(RemoteServiceClient remoteServiceClient) {this.remoteServiceClient = remoteServiceClient;}@HystrixCommand(fallbackMethod = "defaultMessage", commandKey = "RemoteMessageAnnotationClient" )public MessageAcknowledgement sendMessage(Message message) {return this.remoteServiceClient.sendMessage(message);}public MessageAcknowledgement defaultMessage(Message message) {return new MessageAcknowledgement("-1", message.getPayload(), "Fallback Payload");}}

这些注解使用方面转换为幕后的常规Hystrix命令,但很妙的是,在Spring Cloud项目中没有使用该注解的仪式,它只是工作而已。 与以前一样,如果需要自定义行为,则可以使用命令特定的属性来完成。 一个小问题是默认情况下命令名称是方法名称,因此在我的示例中,命令名称将是“ sendMessage”,我已使用注释将其自定义为其他名称。

  • 如果您有兴趣进一步探索该示例,请参阅我的github项目 。

翻译自: https://www.javacodegeeks.com/2015/11/spring-cloud-support-hystrix.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OA系统部署短信过程

安装dotNetFx40_Client_setup.exe插件 安装mysql_installer_community_V5.6.21.1_setup.1415604646.msi数据库 根据数据库版本安装相应驱动&#xff08;64位或者32位系统&#xff09; 安装mysql-connector-odbc-5.3.7-winx64.msi驱动&#xff08;ODBC&#xff09;工具 安装mysq…

centos6配置mysql5.7_CentOS 6/7 下 MySQL 5.7 安装部署与配置

一、前言1、本教程主要内容MySQL 5.7安装(yum)MySQL 5.7 ROOT账号密码修改MySQL 5.7基础使用与配置MySQL shell管理常用语法示例(用户、权限等)MySQL字符编码配置2、本教程环境信息与适用范围环境信息软件版本CentOS7.4 ReleaseMySQL5.7适用范围软件版本CentOSCentOS 6 & C…

hadoop伪分布式搭建 java_hadoop2.2.0伪分布式搭建

第一步&#xff1a;安装jdk我的linux版本是centos7&#xff0c;使用最简单的安装方式&#xff0c;这里首先说一下&#xff0c;由于系统会预装openjdk版本等其他各种版本&#xff0c;首先要做的是清除这些版本&#xff0c;然后iu安装oracle的jdk版本1.1 查看所有jdk版本并删除其…

北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?

作者&#xff1a;知乎用户链接&#xff1a;https://www.zhihu.com/question/21092045/answer/17164418来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。反对目前的两个不靠谱回答&#xff01;需要的卫星数目和别人占坑没有…

可行的DeltaSpike教程

在一个最近的项目中&#xff0c;我遇到了一个有趣的问题&#xff1a;采用被赋予单个对象的服务方法&#xff0c;并在一个夜间过程的上下文中重用相同的代码&#xff0c;该过程独立于应用程序而在数千个相同类型的对象上运行。 试图在两个地方维护如此大小和复杂性的相同过程真…

2017/3/8 函数指针/事件/委托....

函数指针&#xff1a; 定义&#xff1a;函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量&#xff0c;只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样&#xff0c;这里是指向函数。 函数指针有两个用途&#xff1a;调用函数…

java finalize 析构_close,析构函数和finalize:Java矛盾

try { FileInputStream in new FileInputStream(filename);BufferedReader readernew BufferedReader(new InputStreamReader(in));String line;while((linereader.readLine())!null){// read the file}}catch (Exception e) {System.out.println(e);}但是如果我尝试将命令添加…

sharesdk短信验证码的集成

在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等 根据官网开发文档导入SDK,目录结构如下 将以上文件按需放入Android Studio项目所要使用SMSSDK的Module所在的Libs里面&#xff0c;再在Module的build.gradle里面将libs加入仓库&#xff08;reposito…

java四神兽_SpringCloud五大神兽之Eureka

注册中心概述什么是注册中心&#xff1f;相当于服务之间的‘通讯录’&#xff0c;记录了服务和服务地址之间的映射关系。在分布式架构中服务会注册到这里。当服务需要调用其他服务时&#xff0c;就在注册中心找到其他服务的地址&#xff0c;进行调用注册中心的主要作用&#xf…

Mockito入门

本文是我们名为“ 用Mockito进行测试 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入了解Mockito的魔力。 您将了解有关“模拟”&#xff0c;“间谍”和“部分模拟”的信息&#xff0c;以及它们相应的Stubbing行为。 您还将看到使用测试双打和对象匹配器进行验证的过…

windows下dubbo-admin和zookeeper安装部署

1. 概述 ZooKeeper是Hadoop的正式子项目&#xff0c;它是一个针对大型分布式系统的可靠协调系统&#xff0c;提供的功能包括&#xff1a;配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务&#xff0c;将简单易用的接口和性能高效、…

jpush java api_JPush極光推送Java服務器端API

產品功能說明極光推送(JPush)是一個端到端的推送服務&#xff0c;使得服務器端消息能夠及時地推送到終端用戶手機上&#xff0c;讓開發者積極地保持與用戶的連接&#xff0c;從而提高用戶活躍度、提高應用的留存率。極光推送客戶端支持 Android, iOS 兩個平台。本 Android SDK …

Maven详解(转)

转自 https://www.cnblogs.com/hongwz/p/5456578.html 一.前言 以前做过的项目中&#xff0c;没有真正的使用过Maven&#xff0c;只知道其名声很大&#xff0c;其作用是用来管理jar 包的。最近一段时间在项目过程中使用Maven&#xff0c;用Maven构建的web项目&#xff0c;其项目…

javafx性能_对JavaFX Mobile应用程序进行性能分析

javafx性能注意&#xff1a;本文最初发表于2009年&#xff0c;仅供参考。 请查阅我们其余的JavaFX文章 。 对于每个JavaFX Mobile应用程序开发人员而言&#xff0c;今天都是美好的一天。 你想知道为什么吗&#xff1f; 因为JavaME SDK 3.0已发布。 根据我午休时听到的消息&…

egg.js java 生产数据_Egg 2.15.0 发布,阿里开源的企业级 Node.js 框架

值得注意的变化新特性[EXPERIMENT FEATURE] 支持单线程模式Bug 修复[TYPE] 支持config.static.dir的数组[TYPE] 修复中间件类型不兼容[TYPE] 修复当 esModuleInterop 为 true 时类型错误的bug其他优化文档设计原则企业级应用在追求规范和共建的同时&#xff0c;还需要考虑如何平…

SpringMVC工作原理

Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色&#xff0c;这种分离让它们更容易进行定制。 Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。 SpringMVC原理图 SpringMVC接口解释&#xff1a; DispatcherSer…

2015年的Java –重大事件

2015年是Java的一年&#xff0c;语言&#xff0c;平台&#xff0c;生态系统和社区继续主导着软件领域&#xff0c;只有Javascript对整个行业产生了类似的影响。 如果您错过了2015年的亮点&#xff0c;这里是发生的一些重大事件。 Java 20岁了&#xff0c;还没有死&#xff01;…

java商品编写代码_商品品牌业务之后台Java代码的编写

今天是刘小爱自学Java的第146天。感谢你的观看&#xff0c;谢谢你。商品品牌业务之后台Java代码的编写-1.jpg (50.46 KB, 下载次数: 1)2021-2-5 00:22 上传学习计划安排如下&#xff1a;昨天实现了前端页面的编写以及发送请求&#xff0c;今天关于异步请求工具axios的简单说明。…

java中8种数据类型和默认值所占字节数

java 8种基本数据类型的默认值及所占字节数通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge;2 3 public class Ceshi { 4 int a; 5 double b; 6 boolean c; 7 char d; 8 float f; 9 byte e; 10 long h; 11 short j; 12 public static void main(String…

软件测试实验1:为三角形问题编写一个Java程序,并用Junit测试程序

实验报告 实验内容&#xff1a; 1.Install Junit(4.12), Hamcrest(1.3) with Eclipse 2.Install Eclemma with Eclipse 3.Write a java program for the triangle problem and test the program with Junit. 实验步骤&#xff1a; 1.在eclipse中安装Junit、Hamcrest和eclemma。…