我正在尝试将Chronicle Queue实施到我们的系统中,并且每天都有关于文件滚动的问题,但是在特定时间根据流程的本地时区。我读了一些关于如何指定滚动周期的文章,但根据文档,纪元时间按UTC时间午夜工作。我需要做什么才能配置一个滚动循环让我们说每天晚上5点当地时区正在运行?有什么建议吗?
public class TestRollCycle {
public class TestClass implements TestEvent {
private int counter = 1;
@Override
public void setOrGetEvent(String event) {
System.out.println("Counter Read Value: " + counter);
counter++;
}
}
public interface TestEvent {
void setOrGetEvent(String event);
}
@Test
public void testRollProducer() {
int insertCount = 1;
String pathOfFile = "rollPath";
// Epoch is 5:15PM EDT
SingleChronicleQueue producerQueue = SingleChronicleQueueBuilder.binary(pathOfFile).epoch(32940000).build();
ExcerptAppender myAppender = producerQueue.acquireAppender();
TestEvent eventWriter = myAppender.methodWriter(TestEvent.class);
while (true) {
String testString = "Insert String";
eventWriter.setOrGetEvent(testString);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Counter Write Value: " + insertCount);
insertCount++;
}
}
@Test
public void testRollConsumer() throws InterruptedException {
String pathOfFile = "rollPath";
// Epoch is 5:15PM EDT
SingleChronicleQueue producerQueue = SingleChronicleQueueBuilder.binary(pathOfFile).epoch(32940000).build();
TestClass myClass = new TestClass();
ExcerptTailer trailer = producerQueue.createTailer();
MethodReader methodReader = trailer.methodReader(myClass);
while (true) {
if (!methodReader.readOne()) {
Thread.sleep(1000);
} else {
//System.out.println(trailer.index());
}
}
}
}
答案 0 :(得分:1)
这是我们添加到Chronicle Queue Enterprise的功能。如果您愿意付款,我建议您联系sales@chronicle.software。
答案 1 :(得分:1)
我认为您的测试存在问题 - 提供给队列构建器的32940000的时代是从午夜起9小时15分钟,因此UTC时间上午9:15或美国东部时间上午5:15。这应该是另一个12小时后滚动时间是下午5:15。
我添加了一个测试用例来记录用例的当前行为,并按预期传递。您是否可以仔细检查您是否提供了正确的纪元偏移量,并且可能实施StoreFileListener
以捕获/记录任何滚动事件。
在将事件写入滚动时间边界之后的队列之前,滚动实际上不会发生。因此,没有写入的空闲队列在没有输入事件的情况下不会滚动。
测试在github: