Pat*_*ick 5 google-app-engine rx-java
rxJava库是否与Google Appengine兼容?如果是这样有任何限制?我发现的唯一信息是grepcode上的'部分支持'. http://grepcode.com/snapshot/repo1.maven.org/maven2/com.netflix.rxjava/rxjava-core/0.9.0
什么不支持?
您应该创建一个RxJavaSchedulersHook的子代,并使用您使用的调度程序覆盖其方法com.google.appengine.api.ThreadManager:我这样做:
public class MyThreadSchedulersHook extends RxJavaSchedulersHook {
private final Executor executor = new ScheduledThreadPoolExecutor(10, ThreadManager.backgroundThreadFactory());
@Override
public Scheduler getComputationScheduler() {
return Schedulers.from(executor);
}
@Override
public Scheduler getIOScheduler() {
return Schedulers.from(executor);
}
@Override
public Scheduler getNewThreadScheduler() {
return Schedulers.from(executor);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你应该注册这个钩子.最好在ServletContextListener实现中执行此操作:
public class ContextListener implements ServletContextListener {
@Override
public void contextInitialized(final ServletContextEvent servletContextEvent) {
RxJavaPlugins.getInstance().registerSchedulersHook(new RxMainThreadSchedulersHook());
}
@Override
public void contextDestroyed(final ServletContextEvent servletContextEvent) {
// App Engine does not currently invoke this method.
}
}
Run Code Online (Sandbox Code Playgroud)
这个对我有用.
问题是 Google Appengine 中 Java 线程的限制:https://developers.google.com/appengine/docs/java/#Java_The_sandbox
RxJava在实现中使用 JavaThread和。所以涉及到一些并发的代码不能在Google Java Sandbox中运行。ExecutorSchedulerScheduler
如果你想在Google Appengine中使用,你需要自己Scheduler实现一个特殊的。Scheduler另外,有些操作符可能会Scheduler默认使用,比如默认delay使用。Schedulers.computation()请记住使用它们的Scheduler重载方法。
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |