2017-07-11 12 views
0

現在kotlin、Springソーシャル、Google App Engineで再生しています。私は毎秒多数の信者を取り戻そうとしています。元のリクエストスレッドでもスレッドマネージャでもないスレッドでも、APIコールurlfetch.Fetchを呼び出すことはできません

[INFO] io.reactivex.exceptions.OnErrorNotImplementedException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager 
[INFO] at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704) 
[INFO] at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:64) 
[INFO] at io.reactivex.internal.operators.observable.ObservableInterval$IntervalObserver.run(ObservableInterval.java:83) 
[INFO] at io.reactivex.internal.schedulers.ScheduledDirectPeriodicTask.run(ScheduledDirectPeriodicTask.java:39) 
[INFO] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[INFO] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
[INFO] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
[INFO] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] at java.lang.Thread.run(Thread.java:748) 
[INFO] Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager 
[INFO] at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:844) 
[INFO] at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:116) 
[INFO] at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:40) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:543) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:422) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getResponseCode(URLFetchServiceStreamHandler.java:275) 
[INFO] at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:84) 
[INFO] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) 
[INFO] at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:99) 
[INFO] at org.springframework.social.oauth1.OAuth1RequestInterceptor.intercept(OAuth1RequestInterceptor.java:48) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:86) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:70) 
[INFO] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) 
[INFO] at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) 
[INFO] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:652) 
[INFO] at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:628) 
[INFO] at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:303) 
[INFO] at org.springframework.social.twitter.api.impl.UserTemplate.getUserProfile(UserTemplate.java:60) 
[INFO] at tbetous.SubscribeService$test$1.accept(SubscribeService.kt:20) 
[INFO] at tbetous.SubscribeService$test$1.accept(SubscribeService.kt:11) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:60) 
[INFO] ... 9 more 
[INFO] Exception in thread "RxComputationThreadPool-1" io.reactivex.exceptions.OnErrorNotImplementedException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager 
[INFO] at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704) 
[INFO] at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:64) 
[INFO] at io.reactivex.internal.operators.observable.ObservableInterval$IntervalObserver.run(ObservableInterval.java:83) 
[INFO] at io.reactivex.internal.schedulers.ScheduledDirectPeriodicTask.run(ScheduledDirectPeriodicTask.java:39) 
[INFO] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[INFO] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
[INFO] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
[INFO] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] at java.lang.Thread.run(Thread.java:748) 
[INFO] Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager 
[INFO] at com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:844) 
[INFO] at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:116) 
[INFO] at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:40) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:543) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:422) 
[INFO] at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getResponseCode(URLFetchServiceStreamHandler.java:275) 
[INFO] at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:84) 
[INFO] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) 
[INFO] at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:99) 
[INFO] at org.springframework.social.oauth1.OAuth1RequestInterceptor.intercept(OAuth1RequestInterceptor.java:48) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:86) 
[INFO] at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:70) 
[INFO] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) 
[INFO] at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) 
[INFO] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:652) 
[INFO] at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:628) 
[INFO] at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:303) 
[INFO] at org.springframework.social.twitter.api.impl.UserTemplate.getUserProfile(UserTemplate.java:60) 
[INFO] at tbetous.SubscribeService$test$1.accept(SubscribeService.kt:20) 
[INFO] at tbetous.SubscribeService$test$1.accept(SubscribeService.kt:11) 
[INFO] at io.reactivex.internal.observers.LambdaObserver.onNext(LambdaObserver.java:60) 
[INFO] ... 9 more 

私はそれがGoogleのApp Engineについての何かであるかなり確信している:私は、関数がサブスクライブの実行時に、私はこの例外を取得

@Service 
class SubscribeService { 
    var subscriber : Disposable? = null 
    var twitter : Twitter = TwitterTemplate(
      "XXXAUTHXXX", 
      "XXXAUTHXXX", 
      "XXXAUTHXXX", 
      "XXXAUTHXXX") 

    fun subscribe() { 
     subscriber = Observable.interval(1, TimeUnit.SECONDS).subscribe {println(twitter.userOperations().getUserProfile("azeaze").followersCount)} 
    } 

    fun unsubscribe() { 
     subscriber?.dispose() 
    } 
}  

は、ここに私のコードです。私のアプリケーションを実行するとき、私はmvn appengine:devserverを使用します。誰でも助けてくれますか?

+1

RxJavaは、アウトオブボックスGAE上によるスレッドの制限には動作しません

は、ここに私のコードです。デフォルトスケジューラをカスタマイズして、GAE APIを使用するようにする必要があります。参照:https://stackoverflow.com/questions/23701504/google-appengine-and-rx-java – rciovati

+0

私の解決策を見つけました。ありがとうございます!私は後でそれを掲示するでしょう。 –

答えて

0

私の解決策が見つかりました。このおかげでlink。 GAEはRxJavaと連携して動作しません.Google標準環境の制限を守っていません。 RxJavaがどのようにスレッドを作成しなければならないかを指定しなければならなかった。その後

val scheduler : Scheduler = Schedulers.from(ScheduledThreadPoolExecutor(3, ThreadManager.backgroundThreadFactory())) 
RxJavaPlugins.setComputationSchedulerHandler { scheduler } 

私はRxJavaを使用することができます:

subscriber = Observable.interval(1, TimeUnit.SECONDS) 
        .map { twitter.userOperations().getUserProfile("azeazeaz").followersCount } 
        .subscribe {it -> println(it)} 
関連する問題