【Java】Hystrix服务保护框架 服务降级Fallback

Hystrix服务保护框架 服务降级Fallback

isWulongbo发布于 1 月 28 日

前言

前面我们使用 @HystrixCommand 注解来做服务熔断降级。这种方式存在很大的弊端,代码冗余,并且是不管是否降级都事先开启了新线程,而使用fallback的方式则不调用feign方法前都是在之前的主线程中,只有超时了,才会开新线程来处理,这样性能上更好。

代码改造

Hystrix 使用类方式

【Java】Hystrix服务保护框架 服务降级Fallback

//Hystrix 第二种方式,使用类方式

@RequestMapping("/getUserInfoByMemberHystrix2")

public BaseResponse getUserInfoByMemberHystrix2() {

System.out.println("getUserInfoByMemberHystrix-->线程池名称:" + Thread.currentThread().getName());

return memberServiceFeign.getUserInfo();

}

MemberServiceFallback

【Java】Hystrix服务保护框架 服务降级Fallback

package com.baba.api.fallback;

import com.baba.api.entity.UserEntity;

import com.baba.api.feign.MemberServiceFeign;

import com.baba.wlb.base.BaseApiService;

import com.baba.wlb.base.BaseResponse;

import org.springframework.stereotype.Component;

/**

* @Author wulongbo

* @Date 2021/1/28 10:13

* @Version 1.0

*/@Component

public class MemberServiceFallback extends BaseApiService implements MemberServiceFeign {

@Override

public UserEntity getMember(String name) {

return null;

}

// 服务降级友好提示

@Override

public BaseResponse getUserInfo() {

return setResultError("以类的方式写服务降级,服务器繁忙,请稍后重试!");

}

}

MemberServiceFeign

@FeignClient(name = "app-member") 改为 @FeignClient(value = "app-member",fallback = MemberServiceFallback.class)

package com.baba.api.feign;

import com.baba.api.fallback.MemberServiceFallback;

import com.baba.api.service.IMemberService;

import org.springframework.cloud.openfeign.FeignClient;

/**

* @Author wulongbo

* @Date 2021/1/22 14:12

* @Version 1.0

*///@FeignClient(name = "app-member")

@FeignClient(value = "app-member",fallback = MemberServiceFallback.class)

public interface MemberServiceFeign extends IMemberService{

}

这样就实现了类的方式调用Fallback。

javaspringboot

阅读 52发布于 1 月 28 日

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


wulongbo

我的专栏

avatar

isWulongbo

在人生的头三十年,你培养习惯,后三十年,习惯铸就你

178 声望

8 粉丝

0 条评论

得票时间

avatar

isWulongbo

在人生的头三十年,你培养习惯,后三十年,习惯铸就你

178 声望

8 粉丝

宣传栏

前言

前面我们使用 @HystrixCommand 注解来做服务熔断降级。这种方式存在很大的弊端,代码冗余,并且是不管是否降级都事先开启了新线程,而使用fallback的方式则不调用feign方法前都是在之前的主线程中,只有超时了,才会开新线程来处理,这样性能上更好。

代码改造

Hystrix 使用类方式

【Java】Hystrix服务保护框架 服务降级Fallback

//Hystrix 第二种方式,使用类方式

@RequestMapping("/getUserInfoByMemberHystrix2")

public BaseResponse getUserInfoByMemberHystrix2() {

System.out.println("getUserInfoByMemberHystrix-->线程池名称:" + Thread.currentThread().getName());

return memberServiceFeign.getUserInfo();

}

MemberServiceFallback

【Java】Hystrix服务保护框架 服务降级Fallback

package com.baba.api.fallback;

import com.baba.api.entity.UserEntity;

import com.baba.api.feign.MemberServiceFeign;

import com.baba.wlb.base.BaseApiService;

import com.baba.wlb.base.BaseResponse;

import org.springframework.stereotype.Component;

/**

* @Author wulongbo

* @Date 2021/1/28 10:13

* @Version 1.0

*/@Component

public class MemberServiceFallback extends BaseApiService implements MemberServiceFeign {

@Override

public UserEntity getMember(String name) {

return null;

}

// 服务降级友好提示

@Override

public BaseResponse getUserInfo() {

return setResultError("以类的方式写服务降级,服务器繁忙,请稍后重试!");

}

}

MemberServiceFeign

@FeignClient(name = "app-member") 改为 @FeignClient(value = "app-member",fallback = MemberServiceFallback.class)

package com.baba.api.feign;

import com.baba.api.fallback.MemberServiceFallback;

import com.baba.api.service.IMemberService;

import org.springframework.cloud.openfeign.FeignClient;

/**

* @Author wulongbo

* @Date 2021/1/22 14:12

* @Version 1.0

*///@FeignClient(name = "app-member")

@FeignClient(value = "app-member",fallback = MemberServiceFallback.class)

public interface MemberServiceFeign extends IMemberService{

}

这样就实现了类的方式调用Fallback。

以上是 【Java】Hystrix服务保护框架 服务降级Fallback 的全部内容, 来源链接: utcz.com/a/110409.html

回到顶部