work hard work smart

专注于Java后端开发。 不断总结,举一反三。
随笔 - 1158, 文章 - 0, 评论 - 153, 阅读 - 186万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Feign整合Hystrix

Posted on   work hard work smart  阅读(274)  评论(0编辑  收藏  举报

在前面Feign整合Ribbon负载均衡的基础上(Feign整合Ribbon负载均衡),Feigin再整合Hystrix断路

一、backend_show_consumer工程

该工程的依赖如下

 

 

1、工程中的application.yml中增加配置

1
2
3
feign:
  hystrix:
    enabled: true

  

 

 

2、增加接口ProviderApi,对应backend_show_provider中的提供的两个接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@FeignClient(name = "hello-service-provider",
        path = "/provider",
        fallback = ProviderFallbackAPIImpl.class
public interface ProviderApi {
 
    @RequestMapping(value = "/sayhello")
    String invokerProviderController(@RequestParam("message")String message);
 
    @RequestMapping(value = "/{providerId}/sayhello", method = RequestMethod.POST)
    String invokerProvider(
            @RequestHeader("author") String author,
            @PathVariable("providerId") String providerId,
            @RequestBody UserModel json);
}

  设置fallback = ProviderFallbackAPIImpl.class

 

3、降级实现:ProviderFallbackAPIImpl类

1
2
3
4
5
6
7
8
9
10
11
12
//降级实现
@Component
public class ProviderFallbackAPIImpl implements  ProviderApi {
    @Override
    public String invokerProviderController(String message) {
        return "invokerProviderController fallback message=" +message;
    }
 
    @Override
    public String invokerProvider(String author, String providerId, UserModel json) {
        return "invokerProvider fallback auth=" +author + ",providerId=" + providerId +",json=" +json;
    }

  

4、Controller方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Slf4j
@RestController
public class ConsumerController {
 
    @Resource
    private ConsumerServiceAPI serviceAPI;
 
    @Resource
    private ProviderApi providerApi;
 
    @RequestMapping(value = "/sayhello/feign")
    public String sayHelloFeign(String message){
        System.out.println("feign message=" + message);
        return  providerApi.invokerProviderController(message);
    }
 
    @RequestMapping(value = "/sayhello/post")
    public String sayHelloPost( String author,
                                 String providerId,
                                UserModel json){
        log.info("author:{},providerId;{}, userModel:{}", author, providerId, json);
 
        return  providerApi.invokerProvider(author, providerId, json);
    }
 
 
    @RequestMapping(value = "/sayhello")
    public String sayHello(String message){
        return  serviceAPI.sayHello(message);
    }
 
}

  

二、启动eureka服务(略)

三、启动backend_show_provider

四、测试

1、此时访问正常

 

 或者

 

 此时说明Feign整合Ribbon负载均衡器

 

 

 

2、停止backend_show_provider服务,这样backend_show_customer访问backend_show_provider就会超时,触发熔断

 

此时说明Feign整合Hystrix断路器

 

 

五、另外一种实现方式fallbackFactory

1、增加fallbackFactory配置

 

 

2、FallbackFactory 实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Component
public class FallbackFactory implements feign.hystrix.FallbackFactory {
    @Override
    public ProviderApi create(Throwable throwable) {
        return new ProviderApi() {
            @Override
            public String invokerProviderController(String message) {
                  return "invokerProviderController FallbackFactory message=" +message;
            }
 
            @Override
            public String invokerProvider(String author, String providerId, UserModel json) {
                return "invokerProvider FallbackFactory auth=" +author + ",providerId=" + providerId +",json=" +json;
 
            }
        };
    }
}

  

3、调用

 

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示