All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.wz2cool.localqueue.impl.SimpleQueue Maven / Gradle / Ivy

There is a newer version: 0.0.6
Show newest version
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