我有一些从硬件设备连续发出的数据。首先需要将此数据连续发送到Web服务A,如果有足够的数据到达,则会在一段时间后返回结果流。然后,每当结果到达web服务B时,必须转发每个结果,如果来自A的足够结果,则在一段时间之后返回不同结果的流。每个Web服务都有一个异步回调式API。在第一次向每个Web服务发送数据之前,还需要进行一些连接设置。
如何将此映射到RxJava?
答案 0 :(得分:2)
flatMap
和concatMap
是异步链接的主要工具。
您需要将您的网络服务包装到Future
中。并将您的硬件设备转换为Observable
来源。然后它就像:
class WebServices {
Future<Response1> callService1(parameters) { ... }
Future<Response2> callService2(parameters) { ... }
}
hardwareSource
.flatMap(v -> Observable.fromFuture(callService1(...)))
.flatMap(r1 -> Observable.fromFuture(callService2(...)))
.subscribe(r2 -> System.out.println(r2));
如果webservices接收并发送系列消息,则应将其包装到Observable
中。处理管道看起来像:
class WebServices {
Observable<Response1> sendToService1(parameters) { ... }
Observable<Response2> sendToService2(parameters) { ... }
}
hardwareSource
.flatMap(v -> sendToService1(...))
.flatMap(r1 -> sendToService2(...))
.subscribe(r2 -> System.out.println(r2));
如果webservices的传入和传出流没有严格关联(响应与请求没有直接关联),那么我会将这些服务实现为暴露Observer
和Observable
接口的类。
// wire them up
hardwareSource.getObservable()
.subscribe(webService1.getObserver());
webService1.getObservable()
.subscribe(webService2.getObserver());
webService2.getObservable()
.subscribe(resultHandler);
// initiate connections
webService2.connect()
webService1.connect()
hardwareSource.connect()