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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅析currentHashmap的理解

    浅析currentHashmap的理解1,currentHashMap的介绍currentHashMap是线程安全并且高效的一种容器,我们就需要研究一下currentHashMap为什么既能够保证线程安全,又可以保证高效的操作currentHashMap使用的原因为什么使用currentHashMap,这时候我们就需要和HashMap以及HashTable进行比较HashMap线程不安全的原因?在多线程的情况下,HashMa…

    2022年6月18日
    28
  • 命令行查看文件夹大小

    命令行查看文件夹大小du hmax depth 0 查看当前文件夹大小 du hmax depth 1 文件夹下面各个文件和文件夹大小 du hmax depth 0 移动文件夹 mv 指令 cp 是复制

    2025年6月16日
    5
  • pytest运行_python缓存机制

    pytest运行_python缓存机制前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月29日
    10
  • 博弈论集锦

    博弈论集锦看完这么多效应及定理,能否总结成一条?1.马太效应   《新约马太福音》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说:“主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。”于是国王例奖励了他5座城邑。第三个

    2022年5月4日
    38
  • Java 实体对象转Map[通俗易懂]

    Java 实体对象转Map[通俗易懂]为了满足项目的参数传递,需要将实体对象转成map以满足业务需求,下面是实体对象转map的工具类。ObjectToMap.javaimportjava.util.Map;importjava.util.HashMap;importjava.lang.reflect.Field;publicclassObjectToMap{publicstaticMap<String,String>convert(Objectobject)throwsExcept.

    2022年5月16日
    44
  • 2019年C-NPS研究成果发布 中国品牌赢得更多肯定

    2019年C-NPS研究成果发布 中国品牌赢得更多肯定中新网1月15日电15日,品牌评级权威机构Chnbrand发布2019年(第五届)中国顾客推荐度指数(C-NPS)品牌排名和分析报告。该指数是中国首个顾客推荐度评价体系,2015年首次推出并获得工业和信息化部品牌政策专项资金的扶持。此次报告显示,2019年C-NPS略有提升,总分为8.4分,较去年提升1.5分;服务业净推荐值依然领先,耐用消费品行业和快速消费品行业位列第二、三位;中国品牌正在赢…

    2022年5月20日
    36

发表回复

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

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