[英]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.