我有一个连续生成的日志流,即只要系统中有新日志可以调用的方法。我不想在每次生成日志时处理日志(因为日志是每毫秒左右生成的)。
我想收集一段时间内发出的日志,比如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);
}
答案 0 :(得分:4)
您需要创建一个在多个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);
}