Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading RXJava调度程序和异步回调api_Multithreading_Asynchronous_Rx Java - Fatal编程技术网

Multithreading RXJava调度程序和异步回调api

Multithreading RXJava调度程序和异步回调api,multithreading,asynchronous,rx-java,Multithreading,Asynchronous,Rx Java,在我们的项目中,我们将RXJava与CXF异步(2个Rest服务+1个Soap服务)和Mongodb异步驱动程序一起使用 public Observable<MyReturn> itineraries(MyQuery query) { return Observable.create((Observable.OnSubscribe<MyReturn>) subscriber -> { WebC

在我们的项目中,我们将RXJava与CXF异步(2个Rest服务+1个Soap服务)和Mongodb异步驱动程序一起使用

        public Observable<MyReturn> itineraries(MyQuery query) {

            return Observable.create((Observable.OnSubscribe<MyReturn>) subscriber -> {
                WebClient webclient = WebClient.fromClient(clientPrototype(), true);

                String myQuery = "" ;

                webclient.path("myPath",....);

                webclient.get(new InvocationCallback<MyClass>() {

                    @Override
                    public void completed(MyClass response) {
                        MyReturn myReturn = buildResponse(response);

                        subscriber.onNext(myReturn);
                        subscriber.onCompleted();

                    }

                    @Override
                    public void failed(Throwable throwable) {
                        subscriber.onError(new MyError(throwable));
                    }
                });

            });
公众可观察行程(MyQuery){
返回可观察的。创建((可观察的。OnSubscribe)订户->{
WebClient WebClient=WebClient.fromClient(clientPrototype(),true);
字符串myQuery=“”;
webclient.path(“myPath”、…);
webclient.get(新调用回调(){
@凌驾
公共作废已完成(MyClass响应){
MyReturn MyReturn=buildResponse(响应);
订户.onNext(myReturn);
subscriber.onCompleted();
}
@凌驾
公共作废失败(可丢弃可丢弃){
订户.onError(新MyError(可丢弃));
}
});
});
我有一个链式观察对象,我的问题是我的代码是由CXF线程池执行的(我使用一个自定义线程池),而所有其他链式观察对象都是在同一个callaback CXF线程中执行的。因此,我的处理从回调线程转到下一个回调线程

我尝试使用“observerOn”提供我自己的线程池,但它不起作用,代码在回调线程中执行

对于CXF,我可以通过我自己的池,因此这是一个设计问题。但是对于mongodb,我不能通过我的线程池(我没有找到一种方法来通过它),我有一个随机的安全权限问题,即使我允许激活security manager的所有操作


谢谢。

您是如何应用<代码>observeOn?行程中的订户(…).observeOn(Schedulers.computation()).subscribe(…)应该在计算线程上收到值。@akanokd感谢您的回答。行程().flatMap(…).map(…)(RX Observables操作符链)…observeOn(Schedulers.from(myPool)).subscribe()。接收线程没有问题,我在正确的线程中接收流。但是中间计算(在调用CXF或Mongo和最终订阅之间)在CXF或Mongodb线程中执行。然后将
observeOn
放在行程()之后呼叫。谢谢,当我将observeOn添加到由行程返回的observeOn上时,它会起作用。因此,observeOn不会应用于所有observeOn链?我必须将它放在每个observeOn上,在我需要其他调度程序的位置?
observeOn
会影响链中紧随其后的操作符。如果您想在管道的不同点,您必须在这些点应用
observeOn
。您如何应用
observeOn
?行程中的订阅者(…)。observeOn(Schedulers.computation()).subscribe(…)应该收到计算线程上的值。@akanokd感谢您的回答。行程().flatMap(…).map(…)。。(RX Observables operators chains)…observeOn(Schedulers.from(myPool)).subscribe()。接收线程没有问题,我在正确的线程中接收流。但是中间计算(在调用CXF或Mongo和最终订阅之间)在CXF或Mongodb线程中执行。然后将
observeOn
放在行程()之后呼叫。谢谢,当我将observeOn添加到由行程返回的observeOn上时,它会起作用。因此,observeOn不会应用于所有observeOn链?我必须将它放在每个observeOn上,在我需要其他调度程序的位置?
observeOn
会影响链中紧随其后的操作符。如果您想在管道的不同点,必须在这些点应用
observeOn