Package com.github.ddth.queue
Interface IQueue<ID,DATA>
-
- All Known Implementing Classes:
AbstractEphemeralSupportQueue,AbstractInmemEphemeralQueue,AbstractLessLockingUniversalJdbcQueue,AbstractLessLockingUniversalJdbcQueue,AbstractLessLockingUniversalSingleStorageJdbcQueue,AbstractLessLockingUniversalSingleStorageJdbcQueue,AbstractQueue,ActiveMqQueue,BaseLessLockingUniversalJdbcQueue,BaseLessLockingUniversalSingleStorageJdbcQueue,BaseRedisQueue,BaseUniversalActiveMqQueue,BaseUniversalDisruptorQueue,BaseUniversalInmemQueue,BaseUniversalJdbcQueue,BaseUniversalKafkaQueue,BaseUniversalMongodbQueue,BaseUniversalRabbitMqQueue,BaseUniversalRedisQueue,BaseUniversalRocksDbQueue,DisruptorQueue,InmemQueue,JdbcQueue,KafkaQueue,LessLockingUniversalMySQLQueue,LessLockingUniversalMySQLQueue,LessLockingUniversalPgSQLQueue,LessLockingUniversalPgSQLQueue,LessLockingUniversalSingleStorageMySQLQueue,LessLockingUniversalSingleStorageMySQLQueue,LessLockingUniversalSingleStoragePgSQLQueue,LessLockingUniversalSingleStoragePgSQLQueue,MongodbQueue,RabbitMqQueue,RedisQueue,RocksDbQueue,UniversalActiveMqQueue,UniversalActiveMqQueue,UniversalDisruptorQueue,UniversalDisruptorQueue,UniversalInmemQueue,UniversalInmemQueue,UniversalJdbcQueue,UniversalJdbcQueue,UniversalKafkaQueue,UniversalKafkaQueue,UniversalMongodbQueue,UniversalMongodbQueue,UniversalRabbitMqQueue,UniversalRabbitMqQueue,UniversalRedisQueue,UniversalRedisQueue,UniversalRocksDbQueue,UniversalRocksDbQueue,UniversalSingleStorageJdbcQueue,UniversalSingleStorageJdbcQueue
public interface IQueue<ID,DATA>APIs to interact with queue.Queue implementation flow:
- Call
take()to get aIQueueMessagefrom queue. - Do something with the message.
- If done with the message, call
finish(IQueueMessage). - Otherwise, call
requeue(IQueueMessage)orrequeueSilent(IQueueMessage)to requeue the message.
- If done with the message, call
- Since:
- 0.1.0
- Author:
- Thanh Ba Nguyen
-
-
Field Summary
Fields Modifier and Type Field Description static intSIZE_NOT_SUPPORTEDReturn this value to indicate that get-size functionality is not supported.
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description IQueueMessage<ID,DATA>createMessage()Create a new, empty queue message.default IQueueMessage<ID,DATA>createMessage(DATA content)Create a new queue message with supplied content.default IQueueMessage<ID,DATA>createMessage(ID id, DATA content)Create a new queue message with supplied id and content.intephemeralSize()Get number of items currently in ephemeral storage.voidfinish(IQueueMessage<ID,DATA> msg)Called when finish processing the message to cleanup ephemeral storage.Collection<IQueueMessage<ID,DATA>>getOrphanMessages(long thresholdTimestampMs)Get all orphan messages (messages that were left in ephemeral storage for a long time).booleanqueue(IQueueMessage<ID,DATA> msg)Queue a message.intqueueSize()Get number of items currently in queue storage.booleanrequeue(IQueueMessage<ID,DATA> msg)Re-queue a message.booleanrequeueSilent(IQueueMessage<ID,DATA> msg)Silently re-queue a message.IQueueMessage<ID,DATA>take()Take a message out of queue.
-
-
-
Field Detail
-
SIZE_NOT_SUPPORTED
static final int SIZE_NOT_SUPPORTED
Return this value to indicate that get-size functionality is not supported.- Since:
- 0.7.1
- See Also:
- Constant Field Values
-
-
Method Detail
-
createMessage
IQueueMessage<ID,DATA> createMessage()
Create a new, empty queue message.- Returns:
- Since:
- 0.6.0
-
createMessage
default IQueueMessage<ID,DATA> createMessage(DATA content)
Create a new queue message with supplied content.- Parameters:
content-- Returns:
- Since:
- 0.6.0
-
createMessage
default IQueueMessage<ID,DATA> createMessage(ID id, DATA content)
Create a new queue message with supplied id and content.- Parameters:
id-content-- Returns:
- Since:
- 0.6.0
-
queue
boolean queue(IQueueMessage<ID,DATA> msg) throws QueueException
Queue a message.Implementation flow:
- Put message to tail of queue storage.
- Parameters:
msg-- Returns:
- Throws:
QueueException.QueueIsFull- if queue storage is full, can not take any more messageQueueException.CannotSerializeQueueMessage- if the supplied message can not be serializeQueueException- other queue exceptions
-
requeue
boolean requeue(IQueueMessage<ID,DATA> msg) throws QueueException
Re-queue a message.Implementation flow:
- Put message to the queue storage (head or tail position depends on the queue implementation); and increase message's re-queue count & update message's queue timestamp.
- Remove message from ephemeral storage.
Note: ephemeral storage implementation is optional, depends on implementation.
- Parameters:
msg-- Returns:
- Throws:
QueueException.QueueIsFull- if queue storage is full, can not take any more messageQueueException.CannotSerializeQueueMessage- if the supplied message can not be serializeQueueException- other queue exceptions
-
requeueSilent
boolean requeueSilent(IQueueMessage<ID,DATA> msg) throws QueueException
Silently re-queue a message.Implementation flow:
- Put message to the queue storage (head or tail position depends on the queue implementation); do NOT increase message's re-queue count and do NOT update message's queue timestamp.
- Remove message from ephemeral storage.
Note: ephemeral storage implementation is optional, depends on implementation.
- Parameters:
msg-- Returns:
- Throws:
QueueException.QueueIsFull- if queue storage is full, can not take any more messageQueueException.CannotSerializeQueueMessage- if the supplied message can not be serializeQueueException- other queue exceptions
-
finish
void finish(IQueueMessage<ID,DATA> msg) throws QueueException
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.
- Parameters:
msg-- Throws:
QueueException
-
take
IQueueMessage<ID,DATA> take() throws QueueException
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 ephemeral storage is full, can not put message to ephemeral storageQueueException.CannotDeserializeQueueMessage- if the queue message can not be deserializedQueueException- other queue exceptions
-
getOrphanMessages
Collection<IQueueMessage<ID,DATA>> getOrphanMessages(long thresholdTimestampMs) throws QueueException.OperationNotSupported
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- Throws:
QueueException.OperationNotSupported- Since:
- 0.2.0
-
queueSize
int queueSize() throws QueueExceptionGet number of items currently in queue storage.- Returns:
- negative number if queue size can not be queried
- Throws:
QueueException
-
ephemeralSize
int ephemeralSize() throws QueueExceptionGet 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
- Throws:
QueueException
-
-