Yeni oluşturulan dosyalarda bir dizini ve yangın mantığını izlemek için bir saat hizmetini kullanıyorum. Yakın zamanda yaşadığım zorluklardan biri, yüksek hacimli dosyaların işlenmesi gerektiğinde ve izleme dizinine çok hızlı bir şekilde kopyalanmaya başladığında bir taşmanın tetiklenmesidir.Bir saat hizmetinde pollEvents() taşma türünü düzgün bir şekilde nasıl işlerim?
Dosya sistemleri daha hızlı alındıktan veya işlenebilir daha olayları bildirebilir ve bir uygulama o birikebilir olayların sayısı belirtilmeyen bir sınır getirebilir:
API bu konuda taşması diyor. Bir uygulama bilerek olayları atarsa, o zaman bir olayın OVERFLOW olay türüyle bir öğeyi döndürmesi için, anahtarın pollEvents yöntemini düzenler.
Sorum düzgün işlenmesi gereken olayların hiçbirini kaybetmeden, taşma işleyebilir nasıl olduğunu? Ben pratikte taşma olayı görmedim
Path myDir = Paths.get(srcDir);
try(WatchService watcher = myDir.getFileSystem().newWatchService()){
myDir.register(watcher, ENTRY_CREATE,ENTRY_MODIFY);
int x = 0;
for(;;){
x++;
WatchKey watchKey = watcher.take();
LOGGER.debug("Event # {}",x);
List<WatchEvent<?>> events = watchKey.pollEvents();
LOGGER.info("Events Size {}",events.size());
for (WatchEvent event : events) {
if(event.kind() == OVERFLOW){
LOGGER.error("The Maximum watchService events has been reached!");
System.exit(1); //I exit so I know there is a problem - but how should I handle this?
}
if (event.kind() == ENTRY_CREATE) {
LOGGER.info("File created: " + event.context().toString());
LOGGER.info("Beginning Processing:" +event.context().toString());
...business logic here...
}
}
watchKey.reset();
}
...
Bir taşma *, * olayları kaybettiğiniz anlamına gelir. Bir taşma işlemek ve olayları kaybetmek istemediğinizi söylemek mantıklı değil. –
@PeterLawrey Dokümantasyon ayrıca şunları ifade eder: Bu olay tüketici tarafından nesnenin durumunu yeniden incelemek için tetikleyici olarak kullanılabilir. Bir taşma nedeniyle bir olayı kaybedersem, sıradaki etkinliklerim hala devam eder mi? ve eğer öyleyse, bir sonraki olay kümesini nasıl alabilirim? –