package fi.iki.mkuokkanen.seda.queue; import com.lmax.disruptor.EventHandler; import com.lmax.disruptor.dsl.Disruptor; import fi.iki.mkuokkanen.seda.keyStore.Storage; import fi.iki.mkuokkanen.seda.queue.event.Message; import fi.iki.mkuokkanen.seda.queue.eventhandler.LoggerEventHandler; import fi.iki.mkuokkanen.seda.queue.eventhandler.OpInEventHandler; import fi.iki.mkuokkanen.seda.queue.translator.JsonToMessageTranslator; import javax.inject.Inject; /** * Inbound queue, passes messages from clients to storage. * * @author mkuokkanen */ class QueueInImpl extends AbstractDisruptor implements QueueIn { private final Storage storage; private final JsonToMessageTranslator translator; /** * Default constructor. * * @param storage */ @Inject QueueInImpl(Storage storage, JsonToMessageTranslator translator) { this.storage = storage; this.translator = translator; } /** * Creates event handlers and sets their processing order. * * @param disruptor */ @SuppressWarnings("unchecked") @Override void setupEventHandlers(Disruptor<Message> disruptor) { EventHandler<Message> logHandler = new LoggerEventHandler("InLog"); EventHandler<Message> operation = new OpInEventHandler(storage); disruptor .handleEventsWith(logHandler) .then(operation); } @Override public void writeJsonToQueue(String json) { getRingBuffer().publishEvent(translator, json); } }