Springcloud中使用Hystrix註解方式實現服務降級、熔斷、隔離

在上一篇博客搭建的項目基礎上:https://blog.csdn.net/qq_41890624/article/details/103663817

 

首先在parent的pom.xml 中添加Hystrix相關依賴

<!-- hystrix斷路器 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		</dependency>

在order-service-impl 項目的配置文件中添加開啓Hystrix

feign:
  hystrix:
    enabled: true

在項目的OrderServiceImpl類中添加三個方法測試

package com.vhukze.order;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.vhukze.api.entity.UserEntity;

@RestController
public class OrderServiceImpl implements IOrderService{

	@Autowired
	private MemberServiceFeign feign;
	
	@RequestMapping("toMember")
	public String toMember(String name) {
		// TODO Auto-generated method stub
		System.out.println("當前線程名稱:"+Thread.currentThread().getName());
		UserEntity user = feign.getMember(name);
		return user.toString();
	}
	
	@RequestMapping("toMemberHystrix")
	@HystrixCommand(fallbackMethod="fallbackMethod")
//此註解默認開啓服務熔斷、服務降級(指定降級使用的方法名稱)、線程池隔離
	public String toMemberHystrix(String name) {
		// TODO Auto-generated method stub
		System.out.println("當前線程名稱:"+Thread.currentThread().getName());
		UserEntity user = feign.getMember(name);
		return user.toString();
	}
	
	public String fallbackMethod(String data) {
		return "服務降級,稍後重試";
	}

}

fallbackMethod指定的方法需要帶一個參數,不然會報錯fallback method wasn't found: fallbackMethod([class java.lang.String])

 

現在訪問http://localhost:8020/toMemberHystrix?name=22會出現服務降級的提示,因爲getMember 方法中設置了線程等待1.5秒。Hystrix超時時間沒有設置。

設置Hystrix的超時時間

#### hystrix禁止服務超時時間
hystrix:  
 command: 
   default: 
      execution: 
       timeout: 
        enabled: false

此時可以正常訪問。

 

然後我們使用壓力測試工具Jmeter設置200個線程循環訪問訪問http://localhost:8020/toMemberHystrix?name=22

再使用瀏覽器訪問該接口,便會出現服務降級,稍後重試的字樣。

但是訪問http://localhost:8020/toMember?name=22還是可以正常訪問,說明開啓了線程池隔離機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章