You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否修改OpenHFT/Chronicle-Queue数据文件的命名规则?

Customizing Chronicle Queue Data File Naming Conventions

Absolutely! You can absolutely customize how Chronicle Queue names its data files—no need to stick with the default daily date format (like 20180113.cq4). Here are the most common approaches, depending on your needs:

1. Use a Predefined Roll Cycle

Chronicle Queue comes with several built-in RollCycle configurations that change the naming pattern automatically. For example:

  • RollCycle.HOURLY: Generates files named like 20180113-00.cq4 (date plus hour)
  • RollCycle.MINUTELY: Uses 20180113-1430.cq4 (date plus hour-minute)
  • RollCycle.DAILY: The default you're already seeing

To use one of these, just specify it when building your queue:

ChronicleQueue queue = ChronicleQueueBuilder.single("/your/queue/path")
    .rollCycle(RollCycle.HOURLY)
    .build();

2. Create a Custom Roll Cycle

If the predefined cycles don't fit, you can define your own with a custom date format string. For example, let's make a cycle that rolls every 15 minutes and uses a hyphenated date format:

// Define a custom 15-minute roll cycle with a custom date pattern
RollCycle customCycle = RollCycle.from(
    "QUARTER_HOURLY", // Internal name for the cycle
    "yyyy-MM-dd-HHmm", // Date format to use in filenames
    15, // Number of minutes per cycle
    RollLength.SMALL // File size configuration (adjust as needed)
);

ChronicleQueue queue = ChronicleQueueBuilder.single("/your/queue/path")
    .rollCycle(customCycle)
    .build();

This will generate files like 2018-01-13-1415.cq4.

3. Full Custom Naming Strategy (For Total Control)

If you need even more flexibility—like adding custom prefixes, machine IDs, or arbitrary identifiers—you can implement the QueueFileNamingStrategy interface. This lets you completely control both file naming and cycle number parsing (critical for reading historical files).

Here's an example that adds a custom prefix and includes a timestamp:

QueueFileNamingStrategy customNaming = new QueueFileNamingStrategy() {
    @Override
    public String nameFor(int cycle, RollCycle rollCycle) {
        // Build your custom filename here
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss");
        String timestamp = LocalDateTime.now().format(formatter);
        return "app-log-" + timestamp + "-cycle-" + cycle + ".cq4";
    }

    @Override
    public int cycleNumber(String name, RollCycle rollCycle) {
        // Parse the cycle number from your custom filename (required for reading)
        String cycleSegment = name.split("-cycle-")[1].replace(".cq4", "");
        return Integer.parseInt(cycleSegment);
    }
};

ChronicleQueue queue = ChronicleQueueBuilder.single("/your/queue/path")
    .queueFileNamingStrategy(customNaming)
    .build();

This will create files like app-log-20180113-143000-cycle-1.cq4.

Important Notes

  • When using a custom QueueFileNamingStrategy, the cycleNumber method must correctly parse the cycle number from your filenames. If this is broken, Chronicle Queue won't be able to read historical data properly.
  • Ensure your filenames are unique and sortable—Chronicle Queue relies on ordered filenames to manage the queue's sequence.
  • If running in a cluster, make sure all nodes use the exact same naming strategy to avoid file recognition issues.

内容的提问来源于stack exchange,提问作者Joshnee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:24