使用Hystrix异步执行void方法

时间:2017-05-18 14:26:06

标签: java spring asynchronous hystrix

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

@Service
public class TestService {

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

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

编辑1

  

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

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

1 个答案:

答案 0 :(得分:0)

你可以像这样使用:

@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