package io.vertx.example.rxjava.scheduler.blocking;
import io.vertx.example.util.Runner;
import io.vertx.rxjava.core.AbstractVerticle;
import rx.Observable;
import rx.Scheduler;
/*
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class Scheduled extends AbstractVerticle {
// Convenience method so you can run it in your IDE
public static void main(String[] args) {
Runner.runExample(Scheduled.class);
}
private String blockingLoad(String id) {
// Simulate a blocking action
try {
Thread.sleep(100);
return "someData for " + id;
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
@Override
public void start() throws Exception {
Observable<String> o = Observable.just("someID1", "someID2", "someID3", "someID4");
// This scheduler can execute blocking actions
Scheduler scheduler = io.vertx.rxjava.core.RxHelper.blockingScheduler(vertx);
// All operations done on the observer now can be blocking
o = o.observeOn(scheduler);
// Load from a blocking api
o = o.map(id ->
blockingLoad(id)
);
o.subscribe(item -> {
System.out.println("Got item " + item);
}, err -> {
err.printStackTrace();
}, () -> {
System.out.println("Done");
});
}
}