返回顶部
首页 > 资讯 > 精选 >Spring Cloud中怎么自定义Hystrix请求命令
  • 314
分享到

Spring Cloud中怎么自定义Hystrix请求命令

2023-06-19 12:06:25 314人浏览 安东尼
摘要

spring cloud中怎么自定义Hystrix请求命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。自定义HystrixCommand我们除了使用@Hyst

spring cloud中怎么自定义Hystrix请求命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

自定义HystrixCommand

我们除了使用@HystrixCommand注解,也可以自定义类继承自HystrixCommand,如下:

public class BookCommand extends HystrixCommand<Book> {    private RestTemplate restTemplate;    @Override    protected Book getFallback() {        return new Book("宋诗选注", 88, "钱钟书", "三联书店");    }    public BookCommand(Setter setter, RestTemplate restTemplate) {        super(setter);        this.restTemplate = restTemplate;    }    @Override    protected Book run() throws Exception {        return restTemplate.getForObject("Http://HELLO-SERVICE/getbook1", Book.class);    }}

在BookCommand中注入RestTemplate,然后重写两个方法:一个是getFallback,这个方法将在服务调用失败时回调;另一个是run方法,执行请求时调用。构造方法的第一个参数主要用来保存一些分组信息。

同步调用和异步调用

当BookCommand创建成功之后,我们就可以在我们的Controller中调用它了,如下:

@RequestMapping("/test1")public Book test1() throws ExecutionException, InterruptedException {    BookCommand bookCommand = new BookCommand(HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("")), restTemplate);    //同步调用    //Book book1 = bookCommand.execute();    //异步调用    Future<Book> queue = bookCommand.queue();    Book book = queue.get();    return book;}

关于这一段调用,我说如下几点:

获取到BookCommand对象之后,我们有两种方式来执行请求,一种是调用execute方法发起一个同步请求,另一种是调用queue方法发起一个异步请求。
2.同步请求中可以直接返回请求结果。
3.异步请求中我们需要通过get方法来获取请求结果,在调用get方法的时候也可以传入超时时长。

执行结果如下:

Spring Cloud中怎么自定义Hystrix请求命令  

如果我们先启动一个服务注册中心,再启动两个服务提供者实例,再启动一个服务消费者,然后再关掉一个服务提供者,此时再访问,就会间隔的看到如下页面:

Spring Cloud中怎么自定义Hystrix请求命令  

通过注解实现异步请求

在上篇文章(spring Cloud中的断路器Hystrix)中我们使用了注解来配置Hystrix,当时我们的写法如下:

@HystrixCommandpublic Book test2() {    return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);}

那么这种请求是一种同步请求的方式,如果我们想要使用注解来实现异步请求怎么办呢?很简单,两个步骤:

1.配置HystrixCommandAspect的Bean

项目的入口类中配置一个HystrixCommandAspect的Bean,如下:

@Beanpublic HystrixCommandAspect hystrixCommandAspect() {    return new HystrixCommandAspect();}

2.通过AsyncResult来执行调用

还是使用@HystrixCommand注解,但是方法的实现使用AsyncResult,如下:

@HystrixCommand    public Future<Book> test3() {        return new AsyncResult<Book>() {            @Override            public Book invoke() {                return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);            }        };    }

OK,如此之后我们就可以通过注解来实现异步调用了。调用方式如下:

@RequestMapping("/test3")public Book test3() throws ExecutionException, InterruptedException {    Future<Book> bookFuture = bookService.test3();    //调用get方法时也可以设置超时时长    return bookFuture.get();}

对响应式函数编程的支持

有的小伙伴可能对响应式函数编程情有独钟,Hystrix对此也提供了相应的支持,在我们获取到BookCommand对象之后,也可以通过如下两种方式来获取到一个Observable来对数据进行二次处理:

BookCommand bookCommand = new BookCommand(HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("")), restTemplate);        Observable<Book> observe = bookCommand.observe();        Observable<Book> bookObservable = bookCommand.toObservable();

关于Observable小伙伴们可以自行度娘RxJava的用法,我这里就不再赘述,就说下observe和toObservable的区别:

observe命令在调用的时候会立即返回一个Observable。
2.toObservable则不会立即返回一个Observable,订阅者调用数据的时候才会执行。

通过注解支持响应式函数编程

当然,响应式函数编程也可以通过注解来实现,如下:

@HystrixCommandpublic Observable<Book> test4() {    return Observable.create(new Observable.OnSubscribe<Book>() {        @Override        public void call(Subscriber<? super Book> subscriber) {            if (!subscriber.isUnsubscribed()) {                Book book = restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);                subscriber.onNext(book);                subscriber.onCompleted();            }        }    });}

这个时候我们可以通过在注解中添加参数来描述是通过observe还是toObservable来实现,如下:

@HystrixCommand(observableExecutionMode = ObservableExecutionMode.EAGER)表示使用observe模式来执行@HystrixCommand(observableExecutionMode = ObservableExecutionMode.LAZY)表示使用toObservable模式来执行

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Spring Cloud中怎么自定义Hystrix请求命令

本文链接: https://lsjlt.com/news/296070.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Cloud中怎么自定义Hystrix请求命令
    Spring Cloud中怎么自定义Hystrix请求命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。自定义HystrixCommand我们除了使用@Hyst...
    99+
    2023-06-19
  • Spring Cloud中Hystrix的请求缓存怎么实现
    本篇内容介绍了“Spring Cloud中Hystrix的请求缓存怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过方法重载开启缓存...
    99+
    2023-06-19
  • Spring Cloud中Hystrix的请求合并方法
    本篇内容介绍了“Spring Cloud中Hystrix的请求合并方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!服务提供者接口我需在在服...
    99+
    2023-06-19
  • 怎么在python中自定义请求头
    这期内容当中小编将会给大家带来有关怎么在python中自定义请求头,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络...
    99+
    2023-06-14
  • Spring Cloud中Feign怎么自定义配置与使用
    这篇文章主要介绍了Spring Cloud中Feign怎么自定义配置与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Cloud中Feign怎么自定义配置与使用文章都会有所收...
    99+
    2023-07-02
  • Spring Cloud中的断路器Hystrix怎么使用
    本篇内容介绍了“Spring Cloud中的断路器Hystrix怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们分别启动服务注...
    99+
    2023-06-19
  • Spring Cloud中怎么自定义外部化扩展机制
    这篇文章主要讲解了“Spring Cloud中怎么自定义外部化扩展机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud中怎么自定义外部化扩展机制”吧...
    99+
    2023-06-29
  • Promise中怎么自定义一个GET请求函数
    这篇文章给大家介绍Promise中怎么自定义一个GET请求函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。语法基本new Promise( function(re...
    99+
    2024-04-02
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • Spring Cloud OAuth2怎么实现自定义token返回格式
    这篇“Spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-07-02
  • 怎么在Spring中自定义NamespaceHandler
    今天就跟大家聊聊有关怎么在Spring中自定义NamespaceHandler,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定义Beanpackage com.lcl.sp...
    99+
    2023-06-14
  • Spring Cloud gateway网关怎么拦截Post请求日志
    本篇内容主要讲解“Spring Cloud gateway网关怎么拦截Post请求日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Cloud gateway网关怎么拦截Post请...
    99+
    2023-06-20
  • Spring Cloud中如何自定义Ribbon负载均衡策略
    小编给大家分享一下Spring Cloud中如何自定义Ribbon负载均衡策略,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 主启动类处理还是使用上一节的客户...
    99+
    2023-06-04
  • 怎样增加redis自定义命令
    这篇文章将为大家详细讲解怎样增加redis自定义命令,文章内容质量较高,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis因高性能、轻量的优秀特性成了互联网公司缓存的标配,有的时候我们...
    99+
    2024-04-02
  • Vue.directive中怎么自定义指令
    Vue.directive中怎么自定义指令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是全局API?全局API并不在...
    99+
    2024-04-02
  • linux中如何定义自己的命令
    这篇文章主要介绍linux中如何定义自己的命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!学习如何创建别名:你可以将太长或难以记忆的命令打包成你自己构建的命令。命令别名Alias在 Linux shell 中指的是...
    99+
    2023-06-16
  • Spring Cloud自定义引导属性源的方法是什么
    本篇内容介绍了“Spring Cloud自定义引导属性源的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引导过程添加的外部配置的默...
    99+
    2023-06-05
  • Spring中自定义拦截器怎么用
    小编给大家分享一下Spring中自定义拦截器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建自定义拦截器类(UserTokenInterceptor)并实...
    99+
    2023-06-29
  • MongoDB怎么自定义命令与存储过程
    MongoDB是一种文档型数据库,其不支持传统关系型数据库中的存储过程和自定义命令。在MongoDB中,可以利用JavaScript...
    99+
    2024-05-07
    MongoDB
  • vue中自定义指令怎么用
    小编给大家分享一下vue中自定义指令怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、v-drag需求:鼠标拖动元素思路:元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始点击元素时的坐标 + 初始点击时元素距离可视区域...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作