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

java如何实现服务降级_Hystrix服务降级##注意Hystrix默认的服务降级时长是1秒钟.因为网络波动,这个值在正式环境中需要调整一下.##导入包~~~org.springframework.cloudspring-cloud-starter-netflix-hystrix2.0.1.RELEASE~~~##启动类~~~packagecom.like;importorg.springframework.boot.SpringA…

大家好,又见面了,我是你们的朋友全栈君。

## 注意

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

~~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133416.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab由三维散点绘制三维曲面(含等高线,剖面图)「建议收藏」

    Matlab由三维散点绘制三维曲面(含等高线,剖面图)「建议收藏」绘图描述:由若干个给定的三维散点(x,y,z)绘制一个三维的曲面,具体的效果如图:伪彩图:等高线:三维曲面(深色):三维曲面(浅色)+等高线:剖面图:Matlab程序如下:其中A就是我们散点的数据矩阵A=[173.699116.986-409.863130.39108.312-388.571187.8261…

    2022年10月11日
    2
  • js实现时钟代码

    js实现时钟代码代码<!DOCTYPEhtml><html><headlang=”en”><metacharset=”UTF-8″><title></title><style>/*全局*/*{margin:0;…

    2022年6月28日
    25
  • Javascript深拷贝

    Javascript深拷贝

    2022年3月5日
    41
  • VMware许可证过期_windows许可证过期什么原因

    VMware许可证过期_windows许可证过期什么原因激活密钥VMware2017v14.x永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWD这表文章解决了大部分的常见问题,大家可以去看看http://www.zdfans.com/5928.html

    2025年11月17日
    6
  • securecrt 乱码

    SecureCRT连接Linux时经常会看到乱码。发生乱码的原因主要是有三个地方1.Linux的etc的系统默认配置的编码2.用户环境变量里面设置的LANG变量3.SecureCRT会话变量里面的字符集的设置只要保持这三个地方的字条集编码保持一致就可以了。解决步骤如下:1.设置用户的环境变量查询当前用户的Local信息:[root@devdbserver…

    2022年4月7日
    59
  • delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串

    delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串介绍本文章介绍了DelphiXE5Android手机端转换Ansi字符串,本代码是“浙江-樵夫”开发的一个程序,用来对字符串进行转换,主要代码是://读入Ansi(简体中文)文件…procedureTForm1.CornerButton3Click(Sender:TObject);varStream:TMemoryStream;beginStream:=TMemoryStream….

    2022年7月18日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号