Package com.github.ddth.queue.impl
Class MongodbQueue<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.MongodbQueue<ID,DATA>
-
- All Implemented Interfaces:
IQueue<ID,DATA>,AutoCloseable
- Direct Known Subclasses:
BaseUniversalMongodbQueue
public abstract class MongodbQueue<ID,DATA> extends AbstractEphemeralSupportQueue<ID,DATA>
(Experimental) MongoDB implementation ofIQueue.- Queue-size support: yes
- Ephemeral storage support: yes
- Ephemeral-size support: yes
- Since:
- 0.7.1
- 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 StringCOLLECTION_FIELD_EPHEMERAL_KEYstatic StringCOLLECTION_FIELD_IDstatic StringCOLLECTION_FIELD_QUEUE_DATAstatic StringCOLLECTION_FIELD_QUEUE_TIMEstatic StringCOLLECTION_FIELD_TIMEstatic StringDEFAULT_COLLECTION_NAMEstatic StringDEFAULT_CONN_STR-
Fields inherited from interface com.github.ddth.queue.IQueue
SIZE_NOT_SUPPORTED
-
-
Constructor Summary
Constructors Constructor Description MongodbQueue()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected com.mongodb.client.MongoClientbuildMongoClient()Build a newMongoClientinstance.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.protected IQueueMessage<ID,DATA>fromDocument(org.bson.Document doc)protected com.mongodb.client.MongoCollection<org.bson.Document>getCollection()StringgetCollectionName()Name of MongoDB collection to store queue messages.StringgetConnectionString()MongoDB's connection string (see http://mongodb.github.io/mongo-java-driver/3.10/driver/getting-started/quick-start/).protected com.mongodb.client.MongoDatabasegetDatabase()StringgetDatabaseName()Name of MongoDB database to store data.protected com.mongodb.client.MongoClientgetMongoClient()Getter formongoClient.Collection<IQueueMessage<ID,DATA>>getOrphanMessages(long thresholdTimestampMs)Get all orphan messages (messages that were left in ephemeral storage for a long time).MongodbQueue<ID,DATA>init()Init method.protected voidinitCollection()Initialize collection: Check if collection exists. If collection does not exist, create collection and indexes.protected booleaninsertToCollection(IQueueMessage<ID,DATA> msg)Insert a new message to collection.intqueueSize()Get number of items currently in queue storage.MongodbQueue<ID,DATA>setCollectionName(String collectionName)Name of MongoDB collection to store queue messages.MongodbQueue<ID,DATA>setConnectionString(String connectionString)MongoDB's connection string (see http://mongodb.github.io/mongo-java-driver/3.10/driver/getting-started/quick-start/).MongodbQueue<ID,DATA>setDatabaseName(String databaseName)Name of MongoDB database to store data.MongodbQueue<ID,DATA>setMongoClient(com.mongodb.client.MongoClient mongoClient)Setter formongoClient.protected MongodbQueue<ID,DATA>setMongoClient(com.mongodb.client.MongoClient mongoClient, boolean setMyOwnMongoClient)Setter formongoClient.IQueueMessage<ID,DATA>take()Take a message out of queue.protected org.bson.DocumenttoDocument(IQueueMessage<ID,DATA> msg)protected booleanupsertToCollection(IQueueMessage<ID,DATA> msg)Insert/Update the message to collection.-
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_CONN_STR
public static final String DEFAULT_CONN_STR
- See Also:
- Constant Field Values
-
DEFAULT_COLLECTION_NAME
public static final String DEFAULT_COLLECTION_NAME
- See Also:
- Constant Field Values
-
COLLECTION_FIELD_ID
public static final String COLLECTION_FIELD_ID
- See Also:
- Constant Field Values
-
COLLECTION_FIELD_TIME
public static final String COLLECTION_FIELD_TIME
- See Also:
- Constant Field Values
-
COLLECTION_FIELD_QUEUE_TIME
public static final String COLLECTION_FIELD_QUEUE_TIME
- See Also:
- Constant Field Values
-
COLLECTION_FIELD_QUEUE_DATA
public static final String COLLECTION_FIELD_QUEUE_DATA
- See Also:
- Constant Field Values
-
COLLECTION_FIELD_EPHEMERAL_KEY
public static final String COLLECTION_FIELD_EPHEMERAL_KEY
- See Also:
- Constant Field Values
-
-
Method Detail
-
getConnectionString
public String getConnectionString()
MongoDB's connection string (see http://mongodb.github.io/mongo-java-driver/3.10/driver/getting-started/quick-start/).- Returns:
-
setConnectionString
public MongodbQueue<ID,DATA> setConnectionString(String connectionString)
MongoDB's connection string (see http://mongodb.github.io/mongo-java-driver/3.10/driver/getting-started/quick-start/).- Parameters:
connectionString-- Returns:
-
getDatabaseName
public String getDatabaseName()
Name of MongoDB database to store data.- Returns:
-
setDatabaseName
public MongodbQueue<ID,DATA> setDatabaseName(String databaseName)
Name of MongoDB database to store data.- Parameters:
databaseName-- Returns:
-
getCollectionName
public String getCollectionName()
Name of MongoDB collection to store queue messages.- Returns:
-
setCollectionName
public MongodbQueue<ID,DATA> setCollectionName(String collectionName)
Name of MongoDB collection to store queue messages.- Parameters:
collectionName-- Returns:
-
getMongoClient
protected com.mongodb.client.MongoClient getMongoClient()
Getter formongoClient.- Returns:
-
setMongoClient
public MongodbQueue<ID,DATA> setMongoClient(com.mongodb.client.MongoClient mongoClient)
Setter formongoClient.- Parameters:
mongoClient-- Returns:
-
setMongoClient
protected MongodbQueue<ID,DATA> setMongoClient(com.mongodb.client.MongoClient mongoClient, boolean setMyOwnMongoClient)
Setter formongoClient.- Parameters:
mongoClient-setMyOwnMongoClient-- Returns:
-
getDatabase
protected com.mongodb.client.MongoDatabase getDatabase()
-
getCollection
protected com.mongodb.client.MongoCollection<org.bson.Document> getCollection()
-
initCollection
protected void initCollection()
Initialize collection:- Check if collection exists.
- If collection does not exist, create collection and indexes.
-
buildMongoClient
protected com.mongodb.client.MongoClient buildMongoClient()
Build a newMongoClientinstance.- Returns:
-
init
public MongodbQueue<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>
-
toDocument
protected org.bson.Document toDocument(IQueueMessage<ID,DATA> msg)
-
fromDocument
protected IQueueMessage<ID,DATA> fromDocument(org.bson.Document doc)
-
upsertToCollection
protected boolean upsertToCollection(IQueueMessage<ID,DATA> msg)
Insert/Update the message to collection.- Parameters:
msg-- Returns:
-
insertToCollection
protected boolean insertToCollection(IQueueMessage<ID,DATA> msg)
Insert a new message to collection.- Parameters:
msg-- Returns:
-
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
-
-