
com.github.wz2cool.localqueue.impl.SimpleQueue Maven / Gradle / Ivy
package com.github.wz2cool.localqueue.impl;
import com.github.wz2cool.localqueue.IQueue;
import com.github.wz2cool.localqueue.IReader;
import com.github.wz2cool.localqueue.model.config.SimpleQueueConfig;
import com.github.wz2cool.localqueue.model.config.SimpleReaderConfig;
import com.github.wz2cool.localqueue.model.config.SimpleWriterConfig;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
public class SimpleQueue implements IQueue, AutoCloseable {
private final SimpleQueueConfig config;
private final SimpleWriter writer;
private final Map readerMap = new ConcurrentHashMap<>();
public SimpleQueue(SimpleQueueConfig config) {
this.config = config;
this.writer = getWriter();
}
@Override
public boolean offer(String message) {
return writer.offer(message);
}
private SimpleWriter getWriter() {
return new SimpleWriter(new SimpleWriterConfig.Builder()
.setDataDir(config.getDataDir())
.setKeepDays(config.getKeepDays())
.build());
}
@Override
public synchronized IReader getReader(final String readerKey) {
SimpleReader reader = readerMap.get(readerKey);
if (Objects.nonNull(reader)) {
return reader;
}
reader = new SimpleReader(new SimpleReaderConfig.Builder()
.setDataDir(config.getDataDir())
.setReaderKey(readerKey)
.build());
readerMap.put(readerKey, reader);
return reader;
}
@Override
public synchronized IReader getReader(final SimpleReaderConfig config) {
SimpleReader reader = readerMap.get(config.getReaderKey());
if (Objects.nonNull(reader)) {
return reader;
}
reader = new SimpleReader(config);
readerMap.put(config.getReaderKey(), reader);
return reader;
}
@Override
public void close() {
writer.close();
readerMap.forEach((k, v) -> v.close());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy