Parallel processing RxJava.toblock.tosingle()完全不返回
我正在尝试对两个不同的REST服务进行并行调用,这两个服务返回不同类型的响应。所以我使用了Parallel processing RxJava.toblock.tosingle()完全不返回,parallel-processing,rx-java,observable,Parallel Processing,Rx Java,Observable,我正在尝试对两个不同的REST服务进行并行调用,这两个服务返回不同类型的响应。所以我使用了observable.zip(…).toBlocking().single(),但它从未返回 这就是我正在做的 尝试使用rx zip对不同的服务进行并行调用 我正试着打电话 1.订单信息 2.billInfo @Service public class ParallelServiceCallImpl { ...//var declaration ... Observ
observable.zip(…).toBlocking().single()
,但它从未返回
这就是我正在做的
@Service
public class ParallelServiceCallImpl {
...//var declaration ...
Observable<OrderInfoResponse> getOrderInfoRsp(ServiceRequest serviceRequest) {
return Observable.create((rx.Subscriber <? super OrderInfoResponse> s) -> {
OrderInfoResponse ordrInfo = orderComponent.getOrderDetails(serviceRequest); // this component calls to end service
});
}
Observable<BillInfoResponse> getBillInfoRsp(ServiceRequest serviceRequest) {
return Observable.create((rx.Subscriber <? super BillInfoResponse> s) -> {
BillInfoResponse billInfo = billInfoComponent.getBillingDetails(serviceRequest); // this component calls to end service
});
}
public ServiceEndResponse getServiceBillFinance(ServiceRequest serviceRequest) {
Observable<OrderInfoResponse> orderObservable = getOrderInfoRsp(serviceRequest);
Observable<BillInfoResponse> billObservable = getBillInfoRsp(serviceRequest);
Observable<ServiceEndResponse> responseObservable = Observable.zip(
orderObservable,
billObservable,
(ordrInfo, billInfo) -> {
ServiceEndResponse serviceEndResponse = serviceMapper.endResponseMapper(ordrInfo, billInfo);
return serviceEndResponse;
}
);
ServiceEndResponse serviceResponse = responseObservable.toBlocking().single(); // Not getting response
return serviceResponse;
}
}
我想并行调用ProductComponent.getProducts(ServiceRequestServiceRequest,列出ProductID)
以及以上两个服务 不要使用create(OnSubscribe)
,背压和退订可能很难兑现。但是,当您使用create
时,您没有向订户s
发送任何项目,因此单个项目永远不会到达
使用可调用的而不是创建:
Observable<BillInfoResponse> getBillInfoRsp(ServiceRequest serviceRequest) {
return Observable.fromCallable(() ->
billInfoComponent.getBillingDetails(serviceRequest));
}
非常感谢@Dave,我最近在尝试rxJava,到目前为止我实现的都是对多个服务的顺序调用和对具有多个值的单个服务的并行调用。还请就我补充的第二点向我提出建议。谢谢
Observable<BillInfoResponse> getBillInfoRsp(ServiceRequest serviceRequest) {
return Observable.fromCallable(() ->
billInfoComponent.getBillingDetails(serviceRequest));
}
Scheduler scheduler = Schedulers.io();
a
.zipWith(b.subscribeOn(scheduler))
.zipWith(c.subscribeOn(scheduler))
.subscribe(subscriber);