java如何实现服务降级_Hystrix服务降级

## 注意

Hystrix默认的服务降级时长是1秒钟.因为网络波动,这个值在正式环境中需要调整一下.

## 导入包

~~~

org.springframework.cloud

spring-cloud-starter-netflix-hystrix

2.0.1.RELEASE

~~~

## 启动类

~~~

package com.like;

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;

//@SpringBootApplication

//@EnableDiscoveryClient

//@EnableCircuitBreaker

@SpringCloudApplication //可以使用该注解替代上面的三个注解,但是实践中发现如果使用此注解会导致服务不能降级

public class ConsumerServer

{

public static void main(String[] args)

{

SpringApplication.run(ConsumerServer.class);

}

@Bean

@LoadBalanced

public RestTemplate restTemplate()

{

return new RestTemplate();

}

}

~~~

## 服务提供者修改

~~~

@GetMapping("/{id}")

public User index(@PathVariable("id") Long id)

{

try {

Thread.sleep(2000L); //让程序等待2秒

} catch (InterruptedException e) {

e.printStackTrace();

}

return userServer.queryById(id);

}

~~~

## 指定服务降级处理逻辑

注意,参数和返回值必须和请求的方法一致.

~~~

@GetMapping("/{id}")

@HystrixCommand(fallbackMethod = "fallCallback")

public String index(@PathVariable("id") Long id)

{

String url = "http://user-server/user/";

return restTemplate.getForObject(url + id, String.class);

}

public String fallCallback(Long id)

{

return "服务器压力很大";

}

~~~

## 测试

当请求时长超过默认的1秒后,进入失败处理逻辑:

![](https://box.kancloud.cn/4a0774007ac06d8226ffb0c19ba46e8e_1322x664.png)

## 统一降级逻辑

为该类下所有方法统一处理服务降级,控制器上加上DefaultProperties注解并指定降级处理逻辑的方法:

~~~

@DefaultProperties(defaultFallback = "defaultCallBack")

~~~

~~~

@HystrixCommand

public String index(@PathVariable("id") Long id)

{

String url = "http://user-server/user/";

return restTemplate.getForObject(url + id, String.class);

}

public String defaultCallBack() //注意,这里不能写任何参数

{

return "服务器压力很大2";

}

~~~

## 为方法指定单独的降级属性

在该类下可以找到相关配置:

![](https://box.kancloud.cn/17139bdaeac2590b1cf4e874f51c95e6_2940x860.png)

![](https://box.kancloud.cn/0b6990fb661d56e861bd385cbb6ee7c6_822x910.png)

## Hystrix全局配置

需要写到application.yml配置文件内了:

此配置没有提示,需要自己手写.

~~~

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutInMilliseconds: 3000

~~~

## 针对某个服务进行配置

~~~

hystrix:

command:

user-service: //写服务名或者方法名

execution:

isolation:

thread:

timeoutInMilliseconds: 3000

~~~

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

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

相关文章

谷歌浏览器不能上网_谷歌浏览器插件下载及安装教程!

emmm......这篇文章的内容非常小白,相信大部分人都会这个基本操作。但是阁主相信还有些妹子操作不来,如果还没有男朋友,那不是铁定不会安装谷歌浏览器插件么?其实“谷歌浏览器插件”这个组合,可以解决很多问题&#xf…

高级技巧之Lambda表达式

1.Lambda表达式简介 其本质上是一种匿名方法,它既没有方法名,也即没有访问修饰符和返回值类型,使用它来编写代码将会更加简洁,也更加易读。 2.使用该表达式需要配置的数据 3.传统java和使用Lambda表达式的对比 0)总结&…

java二维数组两个框代表什么_在java语言中,二维数组的两个中括号[][]分别表示()和()。...

【判断题】一元统计分析是研究一个随机变量统计规律的学科。【判断题】合伙创业的成功率一般低于独资创业的成功率。【单选题】镜检时呈“竹节状”排列的是【判断题】酵母菌的菌落与放线菌的菌落相似。【判断题】木纤维是厚壁细胞的一种,它的化学成份以纤维素为主。( )【判断题…

设计模式之——Builder建造模式

Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式。 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目。 Builder抽象类,为建造模式的核心pa…

java程序员_Java和Python的区别 好程序员帮大家解读

Java和Python的区别 好程序员今天先来解读Java编程语言的优势,人工智能和大数据火爆一时,随之而来,引起了编程语言的人气暴涨。而Java和Python作为最炙手可热的编程语言从一开始便赢得了众多程序员的青睐。凭借各自强大的性能和优势&#xff…

java 工具类sort_Java 通用排序工具类ListSortUtils

场景:Java 类 需 重新排序,有时升序、有时倒叙,有时是多字段排序代码:package GenericTest;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Collections;import java.uti…

Centos 搭建 NFS

服务端yum -y install nfs-utils rpcbind chkconfig nfs on chkconfig rpcbind on mkdir -p /tmp/share chmod 600 /tmp/share vim /etc/exports /tmp/share 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync) /tmp/share *(rw,no_root_squash,no_all_squash,sync) servic…

门户网站运营方案_网络营销方案涉及的工作内容有哪些

问:在公司从事网络营销推广工作,想问下要撰写网络营销方案,要涉及到哪些层面,工作内容有哪些呢?答:总的来说,网络营销方案涉及到:网站技术,市场营销,网络应用…

用宝塔本地搭建php,Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)...

宝塔面板宝塔面板类似于wamp,xampp等一键集成环境。但是宝塔面板操作更简单,更新更快。个人建议使用宝塔替代wamp。(LNMP等环境不再赘述,请自行百度。建议使用LNMP环境,即NginxMySQLPHP环境)下载前往宝塔面板官网https://www.bt.c…

C# File类的操作

File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件。File类方法的参量很多时候都是…

微信小程序动态点赞php,在微信小程序中如何实现点赞功能

这篇文章主要介绍了微信小程序基于本地缓存实现点赞功能的方法,涉及微信小程序界面布局、事件响应及缓存操作等相关实现技巧,需要的朋友可以参考下本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考,具体如下:wxml中的写法…

lstm需要优化的参数_LSTM的物理结构和一些细节

海晨威:一幅图真正理解LSTM的物理结构​zhuanlan.zhihu.com这个是网上看的最多的图了,但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。展开之后实际的物理结构是这样的,1、2图同颜色的点代表了同一个东西;问题1&#xff…

OLED中的Demura

OLED作为一种电流型发光器件已越来越多地被应用于高性能显示中。由于它自发光的特性,与LCD相比,AMOLED具有高对比度、超轻薄、可弯曲等诸多优点。但是,亮度均匀性和残像仍然是它目前面临的两个主要难题,要解决这两个问题&#xff…

python的编程模式有哪两种_python程序的两种运行方式是什么

python程序的两种运行方式是什么 第一种方式:REPL 所谓REPL即read、eva、print、loop(读取、计算、打印、循环),实现REPL运行方式有以下两种: 1、IDLE( 集成开发环境或集成开发和学习环境)是Pyt…

对Linux命令od -tc -tx1的C语言程序实现myod-优化版

导语 自编od C语言实现版名为myod上个星期有一个初代版,链接- myod原版这星期的课上要求实现myod-系统调用版本,要求如下 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件…

python字典求平均值_Python 3.4 – 如何获得字典值的平均值?

好吧,让我们迭代所有字典键并平均项目: avgDict {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] sum(v)/ float(len(v)) 现在你可以看到: avgDict Out[5]: {Ivan: 3.106666666666667, Martin: 4.81666…

PHP使用指南,PHP使用指南-cookies部分

php使用指南-cookies部分在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。什么是cookies及作用?cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中,由服务器端指定&#xf…

python猜数字游戏猜n次_python实践项目四:猜数字游戏

1 #!/usr/bin/python 2 #-*- coding: UTF-8 -*- 3 4 importrandom5 secretNumberrandom.randint(1,20)6 print "Im thinking of a number between 1 and 20." 7 times 08 for i in range(1,7):9 print "Take a guess:" 10 guessint(input())11 if guess

使用Linux记录

更新时间: 2018-12-12 Linux Usage 缘起:最近将系统更换为Linux,虽然之前有用过,但只是当作尝试,未当为主系统,这次下定决心以它为主系统,懒得去纠结使用win的一种不道德感及不爽感,游戏及娱乐与…

使用java实现rfc3161,openssl验证用自签名证书签名的RFC3161时间戳

我使用openssl从rfc 3161 timestampreq生成了一个rfc3161 timestampresp。因此,我使用了自签名CA证书和自签名CA使用以下命令颁发的TSA证书:openssl ts -reply -queryfile request.tsq -signer TSAcert.pem -out response.tsr已创建响应。openssl ts -reply -text -in response…