RxJava在Observable中收集AMPQ事件并使用缓冲区进行订阅

时间:2018-05-17 12:13:29

标签: java rx-java reactive-programming

我必须收集一些AMPQ事件,然后使用缓冲区每10秒打印一次。

private Observable<Event> obs = Observable.empty(); 
private final Disposable disposable = obs.buffer(10, SECONDS)
                              .retry(t -> true)
                              .subscribe(System.out::println);

@Override
public void handle(final Event event, final MessageContext context) throws MessageConsumptionException {
      obs = obs.concatWith(Observable.just(event));
}

事件是消息, void handle 是消费者。

我调试了这段代码,它只打印一个空列表,这是有道理的,因为 obs 是空的。

如何将(concat?)事件添加到此Observable并持续执行一次性? 感谢。

1 个答案:

答案 0 :(得分:2)

您需要Subject即可订阅。 可以使用next(T element)

将新元素推送到主题中
private Subject<Event> subject = ReplaySubject.create();

@Override
public void handle(final Event event, final MessageContext context) throws MessageConsumptionException {
     subject.next(event);
}

public Observable<Event> getObservable() {
    subject.asObservable();
}

您可以订阅getObservable()方法返回的observable。