Сообщения хроники Java не удаляются после прочтения
Я пытаюсь использовать Java Chronicle 1.9.2 для записи / чтения сообщений. Я знаю, что доступны новые версии, но у меня есть несколько вопросов, прежде чем я потрачу на это больше времени.
Мне нужно удалить сообщение, как только я прочитаю выдержку из хроники. Так что, если мой читатель начнет снова, он не вернется к началу. Также сообщение бесполезно для меня, как только я прочитал его, поэтому хочу удалить его.
Есть ли возможность сделать это? Я пытаюсь выполнить следующий код, и каждый раз, когда я начинаю читать, я снова получаю все сообщения. Также есть ли возможность поместить сообщение "Время жизни", чтобы оно автоматически удалялось по истечении определенного периода времени.
ПИСАТЕЛЬ -
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();
ЧИТАТЕЛЬ -
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();
1 ответ
Мне нужно удалить сообщение, как только я прочитаю выдержку из хроники.
Единственный способ удалить их - с помощью проката файлов. Вы можете сделать это самостоятельно с помощью IndexedChronicle или VanillaChronicle или текущего SingleChronicleQueue
Так что, если мой читатель начнет снова, он не вернется к началу. Также сообщение бесполезно для меня, как только я прочитал его, поэтому хочу удалить его.
Стандартная практика - записывать свои результаты, включая идентификатор источника, в хронику. Таким образом, вы всегда знаете, какие сообщения были успешно обработаны. Например, вы можете прочитать сообщение, но не обработать его, если произойдет сбой.
Я пытаюсь выполнить следующий код, и каждый раз, когда я начинаю читать, я снова получаю все сообщения.
Это то, для чего он предназначен по умолчанию. Как вы отслеживаете, какие сообщения были обработаны правильно, зависит от вас. (Хотя мы рекомендуем записать это в другую очередь и прочитать последнее сообщение, чтобы найти этот индекс)
Можно ли добавить сообщение "Время жизни", чтобы оно автоматически удалялось по истечении определенного периода времени.
Вы можете добавить отметку времени к каждому сообщению и игнорировать старые сообщения.
Chronicle Queue v4.1.0 является последней версией.