У меня есть HTTP-запрос, который запускает долго выполняющуюся задачу (несколько HTTP-запросов к другой службе), которая должна выполняться в фоновом режиме, пока исходные запросы завершаются.
Так что я делаю
public void triggerWork(@RequestBody SomeObject somObject) {
return new ResponseEntity<>(startWorkAndReturn(somObject), HttpStatus.OK);
}
public void startWorkAndReturn(SomeObject someObject) {
Observable.create(observableEmitter -> {
// do the work with someObject here and at some time call
observableEmitter.onNext("result");
}).subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable disposable) {
}
@Override
public void onNext(Object o) {
// called at some unknown time
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onComplete() {
// currently not used as all the work is done in onNext but maybe that's a mistake
}
});
return;
}
Но это, кажется, блокирует запрос, пока вся работа не будет выполнена.Что уже кажется мне странным, поскольку я никогда не вызываю onComplete, что само по себе может быть ошибкой.Но все же мне интересно, как создать запрос, который сразу же возвращается после запуска фонового рабочего.
Является ли Flowables решением здесь?Я собираюсь реорганизовать их в любом случае, чтобы справиться с противодавлением.Или мне нужно создать фоновый рабочий поток?Какова лучшая практика здесь?
Спасибо