如何在Vagrant中安装和运行elasticsearch?(How to install and run elasticsearch in Vagrant?)
我正在尝试在Vagrant中安装和运行Elasticsearch。 问题是,当我尝试运行elasticsearch时,我收到以下错误:
log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_deprecation.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [deprecation_log_file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_indexing_slowlog.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [index_indexing_slow_log_file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_search_slowlog.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [index_search_slow_log_file]. Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.plugins' (/home/vagrant/elasticsearch-2.3.0/plugins) Likely root cause: java.nio.file.AccessDeniedException: /home/vagrant/elasticsearch-2.3.0/plugins at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) at java.nio.file.Files.createDirectory(Files.java:674) at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) at java.nio.file.Files.createDirectories(Files.java:767) at org.elasticsearch.bootstrap.Security.ensureDirectoryExists(Security.java:337) at org.elasticsearch.bootstrap.Security.addPath(Security.java:314) at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:246) at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:212) at org.elasticsearch.bootstrap.Security.configure(Security.java:118) at org.elasticsearch.bootstrap.Bootstrap.setupSecurity(Bootstrap.java:196) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
我认为问题在于它没有写入权限。 当我通过规定安装弹性时,我获得以下权限:
drwxr-xr-x 2 root root 4096 Apr 3 09:26 bin drwxr-xr-x 2 root root 4096 Apr 3 09:26 config drwxr-xr-x 2 root root 4096 Apr 3 09:26 lib -rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules -rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt -rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
但是当我手动执行相同操作时:
drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 bin drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 config drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 lib -rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules -rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt -rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
我的Vagrantfile是:
Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provision "shell", inline: <<-SHELL sudo apt-get update sudo apt-get install software-properties-common python-software-properties -y sudo apt-add-repository ppa:webupd8team/java sudo apt-get update echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections sudo apt-get install oracle-java8-installer -y -q wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz tar -xzf elasticsearch-*.tar.gz mv elasticsearch-2.3.0 elasticsearch rm elasticsearch-* SHELL end
I'm trying to install and run Elasticsearch in Vagrant. The issue is that when I try to run elasticsearch I get the following error:
log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_deprecation.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [deprecation_log_file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_indexing_slowlog.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [index_indexing_slow_log_file]. log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: /home/vagrant/elasticsearch-2.3.0/logs/elasticsearch_index_search_slowlog.log (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:133) at org.apache.log4j.FileAppender.setFile(FileAppender.java:294) at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165) at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:672) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:516) at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:440) at org.elasticsearch.common.logging.log4j.LogConfigurator.configure(LogConfigurator.java:128) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:243) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) log4j:ERROR Either File or DatePattern options are not set for appender [index_search_slow_log_file]. Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.plugins' (/home/vagrant/elasticsearch-2.3.0/plugins) Likely root cause: java.nio.file.AccessDeniedException: /home/vagrant/elasticsearch-2.3.0/plugins at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384) at java.nio.file.Files.createDirectory(Files.java:674) at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781) at java.nio.file.Files.createDirectories(Files.java:767) at org.elasticsearch.bootstrap.Security.ensureDirectoryExists(Security.java:337) at org.elasticsearch.bootstrap.Security.addPath(Security.java:314) at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:246) at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:212) at org.elasticsearch.bootstrap.Security.configure(Security.java:118) at org.elasticsearch.bootstrap.Bootstrap.setupSecurity(Bootstrap.java:196) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:167) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
I think the problem is that it has no write permission. When I do install elastic through provision I get the following permissions:
drwxr-xr-x 2 root root 4096 Apr 3 09:26 bin drwxr-xr-x 2 root root 4096 Apr 3 09:26 config drwxr-xr-x 2 root root 4096 Apr 3 09:26 lib -rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules -rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt -rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
But when I do the same manually:
drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 bin drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 config drwxrwxr-x 2 vagrant vagrant 4096 Apr 2 18:20 lib -rw-rw-r-- 1 vagrant vagrant 11358 Jan 27 12:53 LICENSE.txt drwxrwxr-x 5 vagrant vagrant 4096 Mar 29 08:04 modules -rw-rw-r-- 1 vagrant vagrant 150 Jan 27 12:53 NOTICE.txt -rw-rw-r-- 1 vagrant vagrant 8700 Jan 27 12:53 README.textile
My Vagrantfile is:
Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provision "shell", inline: <<-SHELL sudo apt-get update sudo apt-get install software-properties-common python-software-properties -y sudo apt-add-repository ppa:webupd8team/java sudo apt-get update echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections sudo apt-get install oracle-java8-installer -y -q wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz tar -xzf elasticsearch-*.tar.gz mv elasticsearch-2.3.0 elasticsearch rm elasticsearch-* SHELL end
原文:https://stackoverflow.com/questions/36383664
最满意答案
将
PublishSubject
与switchMap
PublishSubject
使用:PublishSubject<String> subject = PublishSubject.create(); subject .switchMap( x -> networkOperationObservable(x) .subscribeOn(Schedulers.io)) .subscribe(subscriber);
为了充分利用这个
networkOperationObservable
将明确响应unsubscribe
调用(如关闭Socket
或其他)。Observable.using
是一般的选择工具。Use
PublishSubject
withswitchMap
:PublishSubject<String> subject = PublishSubject.create(); subject .switchMap( x -> networkOperationObservable(x) .subscribeOn(Schedulers.io)) .subscribe(subscriber);
To get the most out of this
networkOperationObservable
would respond sensibly to anunsubscribe
call (as in close theSocket
or whatever).Observable.using
is the tool of choice for that generally.
相关问答
更多-
如果我正确理解了您的问题,您希望能够将多个条件组合到重试中,这意味着重试将在最多一定时间(定时器)之后发生,或者甚至在某个事件发生后更早(网络连接)。 在这种情况下,你需要结合这两个事件,首先,你需要一些Observable通知网络事件(这是一个不同的讨论如何创建它,不应该是用Observable包装系统广播事件的问题),然后你可以这样做: private Observable
networkStateObservable; public class RetryWhenExce ... -
将PublishSubject与switchMap PublishSubject使用: PublishSubject
subject = PublishSubject.create(); subject .switchMap( x -> networkOperationObservable(x) .subscribeOn(Schedulers.io)) .subscribe(subscriber); 为了充分利用这个networkOperationOb ... -
应用cache()应该确保只调用一次登录。 public Observable
login() { return Observable.create(s -> { API.login(new SimpleLoginListener() { @Override public void onLoginSuccess(String token) { s.setProducer(new SinglePr ... -
您不会从回调中返回一个observable,而是将您的回调包装到observable中以使它们可组合(未经测试): Observable
weatherObservable = Observable.create(subscriber -> { Awareness.SnapshotApi.getWeather(client) .setResultCallback(weather -> { ... -
没有我能想到的内置运算符或运算符组合可以实现这一点。 以下是我如何实现它: import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.*; import rx.*; import rx.observers.TestSubscriber; import rx.subjects.PublishSubject; import rx.subscripti ...
-
除非你更有经验,并且需要定制操作员或者想要桥接基于旧版addListener / removeListener的API,否则不应该以create开头。 有关StackOverflow的几个问题使用了create并且是麻烦来源。 我更喜欢fromCallable ,它让你生成一个单一的值或抛出一个异常,因此不需要那些冗长的defer + just来源。 Schedulers.immediate()立即在调用者的线程上执行它的任务,这是你示例中的io()线程,而不是主线程。 目前,不支持将计算移回到Java主线 ...
-
当您调用interval将选择一个与给定调度程序中的单个线程相对应的工作程序(默认为computation ): Observable .interval(5, TimeUnit.SECONDS) .flatMap(n -> task()); 或者如果任务没有返回任何内容: Observable .interval(5, TimeUnit.SECONDS) .doOnNext(n -> task()); 这意味着每5秒会有一次运行,但如果任务需要5秒或更多秒,那么任务将连续运 ...
-
如你所说, 如果每次通话的用户分开,我真的更喜欢。 假设我们有两个可观察者 val call1 = Observable.from(arrayOf(1,2,3,4,5,6,7,8)) val call2 = Observable.from(arrayOf(2,4,6,8)) 如果我们纯粹使用Observable.zip如下,它只能有两个Call1和Call2的单个订阅者。 Observable.zip(call1,call2) {c1, c2 -> Pair(c1,c2) }.subscribe(tas ...
-
switchIfEmpty操作有switchIfEmpty操作符: checkAndReturnExistingUserObservable .switchIfEmpty(insertAndReturnNewUserObservable) 编辑 如果你不需要现有的用户,那么有一个基于flatMap的答案,它将第一个检查变成一个布尔值,并根据它的值进行调度: checkAndReturnExistingUserObservable .map(v -> true).firstOrDefault(false) ...
-
查看zip ,它允许您组合两个observable的结果(如果需要,可以并行运行)。 这是一个例子: obs1.subscribeOn(Schedulers.io()) .zipWith(obs2.subscribeOn(Schedulers.io()), (x,y) -> new Both(x,y)) .doOnNext(both -> updateUI(both)) .subscribe(); Look at zip which will allow you to combin ...