2016-03-19 10 views
3

Ich versuche Java Chronicle 1.9.2 zu verwenden, um Nachrichten zu schreiben/lesen. Ich weiß, dass neuere Versionen verfügbar sind, aber habe wenige Fragen, bevor ich mehr Zeit in es investiere.java Chronik Nachrichten werden nicht nach dem Lesen entfernt

Ich muss die Nachricht entfernt haben, sobald ich den Auszug aus der Chronik gelesen habe. Also wenn mein Leser wieder anfängt, geht es nicht zum Anfang zurück. Auch eine Nachricht nützt mir nichts, wenn ich sie gelesen habe und sie entfernen will.

Gibt es eine Option, dies zu tun? Ich versuche folgenden Code und jedes Mal, wenn ich den Leser starte, bekomme ich alle Nachrichten wieder. Gibt es auch eine Möglichkeit, eine Time-to-Live-Nachricht zu senden, so dass sie nach einem bestimmten Zeitraum automatisch entfernt wird.

SCHREIBER -

 String tempPath = System.getProperty("java.io.tmpdir"); 
     String basePrefix = tempPath + "chronicle"; 
     System.out.println("base prefix: " + basePrefix); 
     Chronicle chr = new IndexedChronicle(basePrefix); 
     final Excerpt excerpt = chr.createExcerpt(); 
     excerpt.startExcerpt(this.getmsgtext().length() + 4); 
     excerpt.writeBytes(this.getmsgtext()); 
     excerpt.finish(); 
     chr.close(); 

READER -

 String tempPath = System.getProperty("java.io.tmpdir"); 
     String basePrefix = tempPath + "chronicle"; 
     System.out.println("base prefix: " + basePrefix); 
     Chronicle chr = new IndexedChronicle(basePrefix); 
     final Excerpt excerpt = chr.createExcerpt(); 

     while (excerpt.nextIndex()) { 
       System.out.println("Read string from chronicle: " + excerpt.readByteString()); 
     } 
     chr.close(); 

Antwort

3

Ich brauche die Nachricht einmal las ich aus der Chronik den Auszug zu entfernen.

Die einzige Möglichkeit, sie zu entfernen, ist mit der Datei rollen. Sie können sich selbst tun dies mit IndexedChronicle oder mit VanillaChronicle oder der aktuellen SingleChronicleQueue

Also, wenn meine Leser beginnt wieder es nicht zurück zum Anfang geht. Auch eine Nachricht nützt mir nichts, wenn ich sie einmal gelesen habe und sie entfernen will.

Die Standardübung besteht darin, Ihre Ergebnisse einschließlich der Quell-ID in eine Chronik zu schreiben. So wissen Sie immer, welche Nachrichten erfolgreich verarbeitet wurden. z.B. Sie könnten die Nachricht lesen lassen, aber nicht verarbeiten, wenn ein Absturz auftritt.

Ich versuche folgenden Code und jedes Mal, wenn ich den Reader starte, bekomme ich alle Nachrichten wieder.

Das ist, was es standardmäßig tun soll. Wie Sie verfolgen, welche Nachrichten korrekt verarbeitet wurden, bleibt Ihnen überlassen. (Wir empfehlen jedoch, dies in einer anderen Warteschlange aufzuzeichnen und die letzte Nachricht zu lesen, um diesen Index zu finden)

Gibt es eine Option, um eine Time-to-Live-Nachricht zu erstellen, sodass sie nach einem bestimmten Zeitraum automatisch entfernt wird.

Sie können jeder Nachricht einen Zeitstempel hinzufügen und alte Nachrichten ignorieren.

Chronicle Queue v4.1.0 ist die neueste Version.

+0

Danke für Ihre schnelle Antwort, während ich über die Bearbeitung nachdachte! Ich denke über das Zurücksetzen der Datei alle 5 min oder so, ob Nachrichten gelesen werden oder nicht, da es die letzten paar Minuten Situation ist, die ich analysieren möchte. Gibt es eine Option, den Zeiger in Chronicle (über Code) zurückzusetzen oder ich lösche, neu erstellen es etc.
Wenn ich in der Lage bin, den Index zurückzusetzen, bekommen alle Leser die letzte Position mit excerpt.netIndex()? – chappalprasad

+0

@chappalprasad Der einzige sichere Weg, um es zurückzusetzen, um eine neue Datei zu starten. Sie können clear() zu Testzwecken verwenden.Die Warteschlange wird in der Regel verwendet, wenn Sie Nachrichten über einen längeren Zeitraum persistieren müssen, um die Protokollierung zu minimieren, und um Nachrichten aus der Produktion zu beantworten, um Fehler und Leistungsprobleme zu beheben. –

+0

Wie gehe ich zu Datensätzen basierend auf sagen wir letzten 5 Minuten im obigen READER-Code? Ich sehe Index (lange vIndex) -Methode, aber ich berechne den vIndex basierend auf einigen festen Datensatzgröße usw. – chappalprasad

Verwandte Themen