[英]RxJava2 batch items
我有一个连续生成的日志流,即一种方法,只要系统中有新日志可用,该方法就会被调用。 我不想每次都生成日志(因为每毫秒左右生成一次日志)。
我想收集一段时间内发出的日志,比如说5秒钟,然后分批处理它们。
我如何使用rxjava实现这一点。
我尝试过类似的东西
private static void logResults(LogData logData) {
Observable.create((ObservableOnSubscribe<LogData>) e -> {
e.onNext(logData);
}).buffer(5, TimeUnit.SECONDS).subscribeWith(new DisposableObserver<List<LogData>>() {
@Override
public void onNext(List<LogData> logData) {
System.out.print(logData.toString()));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
/**
This method get called every time when new log is there
*/
public static void logGenerated(LogData log) {
logResults(log);
}
您需要创建一个流程,该流程在多次调用logResults
保持活动状态。 最简单的方法是使用静态PublishSubject
:
private static final Subject<LogData> subject =
PublishSubject.<LogData>create(); // .toSerialized();
private static final Disposable logProcessing =
subject.buffer(5, TimeUnit.SECONDS)
.subscribeWith(new DisposableObserver<List<LogData>>() {
@Override
public void onNext(List<LogData> logData) {
System.out.print(logData.toString()));
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
private static void logResults(LogData logData) {
subject.onNext(logData);
}
/**
* This method get called every time when new log is there
*/
public static void logGenerated(LogData log) {
logResults(log);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.