在RxJava中为需要onComplete/onError的事件建模事件接收器
我正在使用RxJava和RxNetty为apachemesos的新HTTP调度器API编写一个客户端 我成功地创建了与RxNetty的连接,并从生成的分块流中创建了一个可观察的对象 现在,我正试图建立一个接收器模型,该接收器可用于向Mesos发回呼叫,以声明/拒绝资源提供、确认任务状态更新等 将要发送到Mesos的消息是一个呼叫,我需要能够为每个进入接收器的呼叫提供一个onCompleted或onError。这是因为Mesos对发送给它的调用执行同步验证 我基本上是在考虑以下因素:在RxJava中为需要onComplete/onError的事件建模事件接收器,java,client,rx-java,event-stream,Java,Client,Rx Java,Event Stream,我正在使用RxJava和RxNetty为apachemesos的新HTTP调度器API编写一个客户端 我成功地创建了与RxNetty的连接,并从生成的分块流中创建了一个可观察的对象 现在,我正试图建立一个接收器模型,该接收器可用于向Mesos发回呼叫,以声明/拒绝资源提供、确认任务状态更新等 将要发送到Mesos的消息是一个呼叫,我需要能够为每个进入接收器的呼叫提供一个onCompleted或onError。这是因为Mesos对发送给它的调用执行同步验证 我基本上是在考虑以下因素: final
final MesosSchedulerClient client = new MesosSchedulerClient();
final Observable<Event> events = client.openEventStream(subscribeCall);
final Observable<Observable<Call>> ackCalls = events
.filter(event -> event.getType() == Event.Type.UPDATE && event.getUpdate().getStatus().hasUuid())
.zipWith(frameworkIDObservable, (Event e, AtomicReference<FrameworkID>> fwId) -> {
final TaskStatus status = e.getUpdate().getStatus();
final Call ackCall = ackUpdate(fwId.get(), status.getUuid(), status.getAgentId(), status.getTaskId());
return Observable.just(ackCall)
.doOnComplete(() -> { ... })
.doOnError((e) -> { ... });
});
client.sink(ackCalls);
现在我提出了一个自定义对象[1],它扩展了Subject,并为onCompleted指定了调用和Action0,为onError指定了Action1。不过,如果可能的话,我更愿意使用来自RxJava的现有构造。我提出的示例用法[2]
任何指导都将不胜感激
[1]
[2] 我最终的解决方案是创建一个自定义订阅者,该订阅者将处理事件流并将请求发送回mesos。我不熟悉mesos,也不完全理解您想要实现的目标。扩展主题似乎是不必要的,因为您不接受订阅者;相反,您可能希望使用订阅服务器。创建或扩展订阅服务器。感谢@akarnokd的指导,我将研究创建订阅服务器。感谢@akarnokd,我已切换到使用订阅服务器。