日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hystix熔断解决雪崩问题

發(fā)布時(shí)間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hystix熔断解决雪崩问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.線程隔離,服務(wù)降級(jí)(服務(wù)的消費(fèi)方做降級(jí)處理)

當(dāng)服務(wù)繁忙時(shí),如果服務(wù)出現(xiàn)異常,不是粗暴的直接報(bào)錯(cuò),而是返回一個(gè)友好的提示,雖然拒絕了用戶的訪問(wèn),但是會(huì)返回一個(gè)結(jié)果。

這就好比去買魚(yú),平常超市買魚(yú)會(huì)額外贈(zèng)送殺魚(yú)的服務(wù)。等到逢年過(guò)節(jié),超時(shí)繁忙時(shí),可能就不提供殺魚(yú)服務(wù)了,這就是服務(wù)的降級(jí)。

系統(tǒng)特別繁忙時(shí),一些次要服務(wù)暫時(shí)中斷,優(yōu)先保證主要服務(wù)的暢通,一切資源優(yōu)先讓給主要服務(wù)來(lái)使用,在雙十一、618時(shí),京東天貓都會(huì)采用這樣的策略。

pom.xml

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>

UserConsumerApplication.java

package cn.itcast.user;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
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.http.client.OkHttp3ClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

//@EnableDiscoveryClient
//@SpringBootApplication
//@EnableCircuitBreaker //服務(wù)的熔斷
@SpringCloudApplication //SpringCloudApplication可以替代上面三個(gè)
public class UserConsumerDemoApplication {

@Bean
@LoadBalanced //負(fù)載均衡
public RestTemplate restTemplate() {
// 這次我們使用了OkHttp客戶端,只需要注入工廠即可
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}

public static void main(String[] args) {
SpringApplication.run(UserConsumerDemoApplication.class, args);
}
} ?

?3.UserHController.java

package cn.itcast.user.controller;import cn.itcast.user.pojo.User; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;@RestController @RequestMapping("consumerH") public class UserHController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("{id}")@HystrixCommand(fallbackMethod = "queryUserByIdFallback") //單個(gè)方法的超時(shí)返回public String queryUserById(@PathVariable("id") Long id){String url = "http://user-service/user/" + id;//User user = restTemplate.getForObject(url, User.class);//return user;String user = restTemplate.getForObject(url, String.class);return user;}public String queryUserByIdFallback(@PathVariable("id") Long id){return "用戶信息查詢出現(xiàn)異常!"; // User user = new User(); // user.setId(id); // user.setNickName("用戶信息查詢出現(xiàn)異常!"); // return user; } }

==========================
配置統(tǒng)一超時(shí)信息
package cn.itcast.user.controller;

import cn.itcast.user.pojo.User;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("consumerH")
@DefaultProperties(defaultFallback = "queryUserByIdFallback")
public class UserHController {
@Autowired
private RestTemplate restTemplate;

@GetMapping("{id}")
//@HystrixCommand(fallbackMethod = "queryUserByIdFallback")
@HystrixCommand
public String queryUserById(@PathVariable("id") Long id){
String url = "http://user-service/user/" + id;
//User user = restTemplate.getForObject(url, User.class);
//return user;
String user = restTemplate.getForObject(url, String.class);
return user;
}

//public String queryUserByIdFallback(@PathVariable("id") Long id){
//return "用戶信息查詢出現(xiàn)異常!";
// User user = new User();
// user.setId(id);
// user.setNickName("用戶信息查詢出現(xiàn)異常!");
// return user;
//}

public String queryUserByIdFallback(){
return "用戶信息查詢出現(xiàn)異常!";
}
}

=============================================================

package cn.itcast.user.controller;

import cn.itcast.user.pojo.User;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("consumerH")
@DefaultProperties(defaultFallback = "queryUserByIdFallback")
public class UserHController {
@Autowired
private RestTemplate restTemplate;

@GetMapping("{id}")
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000"), //響應(yīng)超時(shí)時(shí)間
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")
})
public String queryUserById(@PathVariable("id") Long id){
if(id % 2 ==0){
throw new RuntimeException("");
}
String url = "http://user-service/user/" + id;
String user = restTemplate.getForObject(url, String.class);
return user;
}

public String queryUserByIdFallback(){
return "用戶信息查詢出現(xiàn)異常!";
}
} ?

?

轉(zhuǎn)載于:https://www.cnblogs.com/wuxiang12580/p/10785643.html

總結(jié)

以上是生活随笔為你收集整理的Hystix熔断解决雪崩问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。