Gerencie filas de mensagens no modelo de mensagens Timeline usando a interface TimelineQueue.
Obter uma instância de fila
Uma Queue representa uma única fila de mensagens para um TimelineIdentifier específico em um TimelineStore. Crie uma instância de TimelineQueue usando a interface TimelineStore.
TimelineIdentifier identifier = new TimelineIdentifier.Builder()
.addField("timeline_id", "group_1")
.build();
// A message queue (Queue) for a specific identifier in a TimelineStore.
TimelineQueue timelineQueue = timelineStore.createTimelineQueue(identifier);
A instância de TimelineQueue fornece as seguintes operações para um identificador específico em um armazenamento de dados:
Escrita: síncrona (
store), assíncrona (storeAsync) e em lote (batchStore)Atualização: síncrona (
update) e assíncrona (updateAsync)Leitura: mensagem única (
get) e por intervalo (scan)Exclusão: mensagem única (
delete)
Store
Escreva uma mensagem sincronamente. Dois métodos estão disponíveis, correspondentes às duas formas de implementar o SequenceId: usar uma coluna de incremento automático ou defini-lo manualmente. Configure a implementação no TimelineSchema.
timelineQueue.store(message); // SequenceId implemented by an auto-increment column.
timelineQueue.store(sequenceId, message); // Manually set the SequenceId.
StoreAsync
Escreva uma mensagem assincronamente. Defina um TimelineCallback para tratar sucesso e falha. O método retorna Future<TimelineEntry>.
TimelineCallback callback = new TimelineCallback() {
@Override
public void onCompleted(TimelineIdentifier i, TimelineMessage m, TimelineEntry t) {
// Do something on success.
}
@Override
public void onFailed(TimelineIdentifier i, TimelineMessage m, Exception e) {
// Do something on failure.
}
};
timelineQueue.storeAsync(message, callback); // SequenceId implemented by an auto-increment column.
timelineQueue.storeAsync(sequenceId, message, callback); // Manually set the SequenceId.
BatchStore
Escreva várias mensagens em um único lote. Há suporte para variantes com e sem callback.
timelineQueue.batchStore(message); // SequenceId implemented by an auto-increment column.
timelineQueue.batchStore(sequenceId, message); // Manually set the SequenceId.
timelineQueue.batchStore(message, callback); // SequenceId implemented by an auto-increment column.
timelineQueue.batchStore(sequenceId, message, callback); // Manually set the SequenceId.
Get
Leia uma única mensagem pelo SequenceId. Se a mensagem não existir, o método não gera erro e retorna null.
timelineQueue.get(sequenceId);
GetLatestTimelineEntry
Leia a mensagem mais recente. Se não houver mensagens, o método não gera erro e retorna null.
timelineQueue.getLatestTimelineEntry();
GetLatestSequenceId
Obtenha o SequenceId da mensagem mais recente. Se não houver mensagens, o método não gera erro e retorna 0.
timelineQueue.getLatestSequenceId();
Update
Atualize uma mensagem sincronamente pelo SequenceId.
TimelineMessage message = new TimelineMessage().setField("text", "Timeline is fine.");
// Update the message with a new field.
message.setField("text", "new value");
timelineQueue.update(sequenceId, message);
UpdateAsync
Atualize uma mensagem assincronamente pelo SequenceId. Defina um TimelineCallback para tratar sucesso e falha. O método retorna Future<TimelineEntry>.
TimelineMessage oldMessage = new TimelineMessage().setField("text", "Timeline is fine.");
TimelineCallback callback = new TimelineCallback() {
@Override
public void onCompleted(TimelineIdentifier i, TimelineMessage m, TimelineEntry t) {
// Do something on success.
}
@Override
public void onFailed(TimelineIdentifier i, TimelineMessage m, Exception e) {
// Do something on failure.
}
};
TimelineMessage newMessage = oldMessage;
newMessage.setField("text", "new value");
timelineQueue.updateAsync(sequenceId, newMessage, callback);
Delete
Exclua uma única mensagem pelo SequenceId.
timelineQueue.delete(sequenceId);
Scan
Leia um intervalo de mensagens em ordem direta ou inversa usando um ScanParameter. Retorna Iterator<TimelineEntry> para acesso sequencial.
ScanParameter scanParameter = new ScanParameter().scanBackward(Long.MAX_VALUE, 0);
timelineQueue.scan(scanParameter);