Сообщения хроники 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 является последней версией.

Другие вопросы по тегам