Package com.github.ddth.queue.impl
Class RocksDbQueue<ID,DATA>
- java.lang.Object
-
- com.github.ddth.queue.impl.AbstractQueue<ID,DATA>
-
- com.github.ddth.queue.impl.AbstractEphemeralSupportQueue<ID,DATA>
-
- com.github.ddth.queue.impl.RocksDbQueue<ID,DATA>
-
- All Implemented Interfaces:
IQueue<ID,DATA>,AutoCloseable
- Direct Known Subclasses:
BaseUniversalRocksDbQueue
public abstract class RocksDbQueue<ID,DATA> extends AbstractEphemeralSupportQueue<ID,DATA>
RocksDB implementation ofIQueue.Implementation:
- RocksDB as queue storage
Features:
- Queue-size support: yes
- Ephemeral storage support: yes
- Ephemeral-size support: yes
- Since:
- 0.4.0
- Author:
- Thanh Ba Nguyen
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.github.ddth.queue.impl.AbstractQueue
AbstractQueue.PutToQueueCase
-
-
Field Summary
Fields Modifier and Type Field Description static StringDEFAULT_CFNAME_EPHEMERALstatic StringDEFAULT_CFNAME_METADATAstatic StringDEFAULT_CFNAME_QUEUEstatic StringDEFAULT_STORAGE_DIR-
Fields inherited from interface com.github.ddth.queue.IQueue
SIZE_NOT_SUPPORTED
-
-
Constructor Summary
Constructors Constructor Description RocksDbQueue()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voiddestroy()Destroy method.protected booleandoPutToQueue(IQueueMessage<ID,DATA> msg, AbstractQueue.PutToQueueCase queueCase)Put a message to the queue storage.intephemeralSize()Get number of items currently in ephemeral storage.voidfinish(IQueueMessage<ID,DATA> msg)Called when finish processing the message to cleanup ephemeral storage.StringgetCfNameEphemeral()Name of the column-family to store ephemeral messages.StringgetCfNameMetadata()Name of the column-family to store metadata.StringgetCfNameQueue()Name of the column-family to store queue messages.Collection<IQueueMessage<ID,DATA>>getOrphanMessages(long thresholdTimestampMs)Get all orphan messages (messages that were left in ephemeral storage for a long time).StringgetStorageDir()Directory to store RocksDB data files.RocksDbQueue<ID,DATA>init()Init method.intqueueSize()Get number of items currently in queue storage.RocksDbQueue<ID,DATA>setCfNameEphemeral(String cfNameEphemeral)Name of the column-family to store ephemeral messages.RocksDbQueue<ID,DATA>setCfNameMetadata(String cfNameMetadata)Name of the column-family to store metadata.RocksDbQueue<ID,DATA>setCfNameQueue(String cfNameQueue)Name of the column-family to store queue messages.RocksDbQueue<ID,DATA>setStorageDir(String storageDir)Directory to store RocksDB data files.IQueueMessage<ID,DATA>take()Take a message out of queue.-
Methods inherited from class com.github.ddth.queue.impl.AbstractEphemeralSupportQueue
getEphemeralDisabled, getEphemeralMaxSize, isEphemeralDisabled, setEphemeralDisabled, setEphemeralMaxSize
-
Methods inherited from class com.github.ddth.queue.impl.AbstractQueue
close, createMessage, createMessage, createMessage, deserialize, deserialize, getMessageFactory, getQueueName, getSerDeser, queue, requeue, requeueSilent, serialize, setMessageFactory, setQueueName, setSerDeser
-
-
-
-
Field Detail
-
DEFAULT_STORAGE_DIR
public static final String DEFAULT_STORAGE_DIR
- See Also:
- Constant Field Values
-
DEFAULT_CFNAME_QUEUE
public static final String DEFAULT_CFNAME_QUEUE
- See Also:
- Constant Field Values
-
DEFAULT_CFNAME_METADATA
public static final String DEFAULT_CFNAME_METADATA
- See Also:
- Constant Field Values
-
DEFAULT_CFNAME_EPHEMERAL
public static final String DEFAULT_CFNAME_EPHEMERAL
- See Also:
- Constant Field Values
-
-
Method Detail
-
getStorageDir
public String getStorageDir()
Directory to store RocksDB data files.- Returns:
-
setStorageDir
public RocksDbQueue<ID,DATA> setStorageDir(String storageDir)
Directory to store RocksDB data files.- Parameters:
storageDir-- Returns:
-
getCfNameQueue
public String getCfNameQueue()
Name of the column-family to store queue messages.- Returns:
- Since:
- 0.4.0.1
-
setCfNameQueue
public RocksDbQueue<ID,DATA> setCfNameQueue(String cfNameQueue)
Name of the column-family to store queue messages.- Parameters:
cfNameQueue-- Returns:
- Since:
- 0.4.0.1
-
getCfNameMetadata
public String getCfNameMetadata()
Name of the column-family to store metadata.- Returns:
- Since:
- 0.4.0.1
-
setCfNameMetadata
public RocksDbQueue<ID,DATA> setCfNameMetadata(String cfNameMetadata)
Name of the column-family to store metadata.- Parameters:
cfNameMetadata-- Returns:
- Since:
- 0.4.0.1
-
getCfNameEphemeral
public String getCfNameEphemeral()
Name of the column-family to store ephemeral messages.- Returns:
- Since:
- 0.4.0.1
-
setCfNameEphemeral
public RocksDbQueue<ID,DATA> setCfNameEphemeral(String cfNameEphemeral)
Name of the column-family to store ephemeral messages.- Parameters:
cfNameEphemeral-- Returns:
- Since:
- 0.4.0.1
-
init
public RocksDbQueue<ID,DATA> init() throws Exception
Init method.- Overrides:
initin classAbstractQueue<ID,DATA>- Returns:
- Throws:
Exception
-
destroy
public void destroy()
Destroy method.- Overrides:
destroyin classAbstractQueue<ID,DATA>
-
doPutToQueue
protected boolean doPutToQueue(IQueueMessage<ID,DATA> msg, AbstractQueue.PutToQueueCase queueCase)
Put a message to the queue storage.Sub-class implements this method.
- Specified by:
doPutToQueuein classAbstractQueue<ID,DATA>- Returns:
-
finish
public void finish(IQueueMessage<ID,DATA> msg)
Called when finish processing the message to cleanup ephemeral storage.Implementation flow:
- Remove message from ephemeral storage.
Note: ephemeral storage implementation is optional, depends on implementation.
-
take
public IQueueMessage<ID,DATA> take() throws QueueException.EphemeralIsFull
Take a message out of queue.Implementation flow:
- Read message from head of queue storage.
- Write message to ephemeral storage.
- Remove message from queue storage.
Note: ephemeral storage implementation is optional, depends on implementation.
- Returns:
- Throws:
QueueException.EphemeralIsFull- if the ephemeral storage is full
-
getOrphanMessages
public Collection<IQueueMessage<ID,DATA>> getOrphanMessages(long thresholdTimestampMs)
Get all orphan messages (messages that were left in ephemeral storage for a long time).- Parameters:
thresholdTimestampMs- message is orphan ifmessage's timestampMillis + thresholdTimestampMs < now. Which meansgetOrphanMessages(10000)will return orphan messages that have stayed in ephemeral storage for more than 10000 milliseconds.- Returns:
nullor empty collection if there is no orphan message
-
queueSize
public int queueSize()
Get number of items currently in queue storage.- Returns:
- negative number if queue size can not be queried
-
ephemeralSize
public int ephemeralSize()
Get number of items currently in ephemeral storage.Note: ephemeral storage implementation is optional, depends on implementation.
- Returns:
- negative number if ephemeral size can not be queried
-
-