在RxJava中为需要onComplete / onError的事件建模事件接收器

时间:2015-11-06 01:02:55

标签: java client rx-java event-stream

我正在为Apache Mesos编写客户端'使用RxJava和RxNetty的新HTTP Scheduler API。

我设法成功创建了与RxNetty的连接,并从生成的分块流中创建了Observable<Event>

现在我正试图建模一个可用于将呼叫发送回Mesos的接收器,以声明/拒绝资源提供,确认任务状态更新等。

发送给Mesos的邮件是Call,我需要能够为每个onCompleted提供一个onErrorCall水槽。这是因为Mesos对发送给它的Call执行了同步验证。

我基本上试图允许以下内容:

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],它扩展了主题并指定了Call的{​​{1}}和Action0以及onCompleted { {1}}。但是,如果可能的话,我更愿意使用RxJava中的现有结构。我已经提出的样本用法[2]。

非常感谢任何指导。

[1] https://github.com/BenWhitehead/mesos-rxjava/blob/sink-operation/mesos-rxjava-core/src/main/java/org/apache/mesos/rx/java/SinkOperation.java#L17

[2] https://github.com/BenWhitehead/mesos-rxjava/blob/sink-operation/mesos-rxjava-example/mesos-rxjava-example-framework/src/main/java/org/apache/mesos/rx/java/example/framework/sleepy/Main.java#L117-L124

1 个答案:

答案 0 :(得分:0)

我最终得到的解决方案是创建一个自定义订阅服务器,它将处理事件流并将请求发送回mesos。