使用 Hystrix 异步执行 void 方法

Posted

技术标签:

【中文标题】使用 Hystrix 异步执行 void 方法【英文标题】:Async execution of void method with Hystrix 【发布时间】:2017-10-18 10:23:38 【问题描述】:

我想知道如何使用 Hystrix 异步执行没有返回值的方法。请参阅以下示例。

@Service
public class TestService 

    @HystrixCommand
    public void test() 
        // some code ...
    

我想多次调用test() 方法(即发即忘),并且该命令应该异步执行。该方法不返回任何内容。我该怎么做?

编辑 1

那么是什么阻止了你。你可以执行一个由 hystrix 支持的方法,即使它没有返回值

此方法一次调用多次。我不希望调用者必须等到执行完成才能再次调用该方法。

【问题讨论】:

那么是什么阻止了你。你可以执行一个由 hystrix 支持的方法,即使它没有返回值 【参考方案1】:

你可以这样使用:

@HystrixCommand
public Future<Object> test() 
    return new AsyncResult<Object>() 
        @Override
        public Object invoke() 
            // your code here
            doSomething();
            // just return null
            return null; 
        
    ;

见:https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica#asynchronous-execution

或者,您可以不使用注释:
new HystrixCommand<Object>(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")) 
    @Override
    protected Object run() throws Exception 
        doSomething();
        return null;
    
.queue();

见:https://github.com/Netflix/Hystrix/wiki/How-To-Use#asynchronous-execution

【讨论】:

以上是关于使用 Hystrix 异步执行 void 方法的主要内容,如果未能解决你的问题,请参考以下文章

21.异步执行和服务降级

javanica中的Hystrix异步方法不在spring-boot java应用程序中运行

Hystrix 不抛出 HystrixRuntimeException,而是空消息错误

Hystrix 学习使用

Hystrix使用的正确姿势

笔记:Spring Cloud Feign Hystrix 配置