2016-05-27 5 views
0

У меня есть веб-сервис для отдыха, который возвращает DeferredResults. Я реализовал JavaRx Observable из службы executer, которая возвращает Future. Я хотел, чтобы этот веб-сервис не блокировался, но, похоже, он блокирует операцию.Служба отдыха с Java, наблюдаемая из службы Executer

Считаете ли вы способ, которым я пользовался службой экстерьера, здоров?

DeferredResult result = new DeferredResult(); 
    Observable<ResultEntity> observable = Observable 
        .from(executerService.submit(callable)); 
      observable.subscribe(new Subscriber<ResultEntity>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable throwable) { 
        result.setErrorResult(throwable.getMessage()); 
       } 

       @Override 
       public void onNext(ResultEntity r) { 
        result.setResult(t); 

       } 

      }); 
+0

Вы видели это http://callistaenterprise.se/blogg/teknik/2014/04/22/c10k-developing-non-blocking -rest-services-with-spring-mvc/ – Optional

+0

Спасибо. Я также использовал CompatableFuture раньше, чтобы создать неблокирующий сервис, и он сработал. Но я хотел бы узнать о RxJava и о том, как я могу создать с ним неблокирующую службу. Вот почему я задаю этот вопрос. –

ответ

0

Observable.from(Future) блокирует операцию, как указано в документации. Вместо этого вы должны использовать Observable.from(Future,Scheduler).

1

Если у вас есть Callable, вы можете использовать fromCallable:

Observable.fromCallable(callable) 
.subscribeOn(Schedulers.from(executorService)) 
.subscribe(...) 

 Смежные вопросы

  • Нет связанных вопросов^_^