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


相关推荐

  • jsonarray方法_getJSONArray

    jsonarray方法_getJSONArray[//JSONArray {“id”:”123″,”courseID”:”huangt-test”,”title”:”提交作业”}, {“content”:null,”beginTime”:1398873600000″endTime”}]//普通对象varperson={name:”bella”,age:18};没…

    2022年10月28日
    0
  • 软件开发入门自学指南[通俗易懂]

    软件开发入门自学指南[通俗易懂]每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发,或者应该怎么自学编程才能入门。在这篇文章里,我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题,并尽量提供相应的解决思路,希望对初学者有所帮助。如果你在看完这篇文章后还是有些疑惑,欢迎点击这里咨询我。目录编程可以自学吗?学习编程需要什么基础?什么是编程语言?什么是程序?我应该学习哪种编程语言?编程的核心思维是什…

    2022年4月19日
    51
  • VM虚拟机Kali安装教程—kalrry

    VM虚拟机Kali安装教程—kalrryKali安装教程Kali安装教程Kali安装教程kali安装时间比较漫长,请耐心等待01.点击创建新的虚拟机02.选择自定义(高级)点击下一步(N)03.点击下一步(N)04.选择稍后安装操作系统(S);点击下一步(N)05.客户机操作系统选择Linux(L);Kali是基于Debian制作,这里的版本(V)我选择的选择是Debian9.x64位;点击下一步(N)06.为了好辨别,虚拟机名称(V)我修改成了Kali,安装位置(L)可自定义,此处位置指的是系统安装位置;点击下一步

    2022年5月6日
    126
  • 线程池的三种队列区别:SynchronousQueue、LinkedBlockingQueue 和ArrayBlockingQueue[通俗易懂]

    线程池的三种队列区别:SynchronousQueue、LinkedBlockingQueue 和ArrayBlockingQueue[通俗易懂]使用方法:privatestaticExecutorServicecachedThreadPool=newThreadPoolExecutor(4,Runtime.getRuntime().availableProcessors()*2,0,TimeUnit.MILLISECONDS,newSynchronousQueue<>(),r->ne…

    2022年6月22日
    25
  • goland激活码最新-激活码分享

    (goland激活码最新)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlTR0LFTT656-eyJsa…

    2022年3月22日
    56
  • 哈佛幸福课笔记[通俗易懂]

    哈佛幸福课笔记[通俗易懂]第一课什么是积极心理学1、快乐由精神状态决定,而不是社会地位和银行存款2、成功的两个因素:相信自己、保持好奇不断学习第二课为什么要学习积极心理学1、你所问的问题决定了你的感受,当一个人总是问自己:我的弱点是什么?我如何做的更好?他会忽略自己的优点,认为优点是不存在的2、从专注缺点到专注优点3、做一个行动者,行动可以增加自信,而不是一个被动者抱怨者第三课幸福是一…

    2022年7月25日
    11

发表回复

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

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