public class MessageStore
extends java.lang.Object
implements java.io.Serializable
Responsável pelo armazenamento das mensagens. Também mantém a informação de quais mensagens foram recebidas por quais consumidores.
O MessageStore permite consumir as mensagens de duas maneiras:
peek(Serializable, IFilter)
seguido do Entry#setAcknowledgedBy(Serializable) para marcar cada
mensagem como recebidareceive(Serializable, IFilter) que
já marca as mensagens como recebidas antes de devolvê-las.receiveTimeoutms. Os consumidores que estavam ativos no momento em
que elas entraram neste estado podem consumi-las, se já não as consumiram,
antes que elas expirem.
Para evitar que clientes que caíram e voltaram com outro identificador de
consumidor recebam uma mensagem duplicada, assim que uma mensagem é marcada
como recebida, ela entra em estado de expirando e fica salvo quais
consumidores estavam ativos no momento em que ela trocou de estado. a partir
daí, apenas esses poderam consumi-la antes que ela entre em estado de
expirada. Assim, se um consumidor recebeu aquela mensagem, perdeu a conexão,
voltou e obteve um novo identificador de consumidor, ele não tem mais acesso
aquela mensagem por que aquele identificador não estava ativo no primeiro
momento em que ela foi marcada como recebida.
Sempre que chamar um dos métodos para se obter as mensagens,
receive(Serializable, IFilter) ou
peek(Serializable, IFilter), o consumidor será marcado como ativo e
assim permanecerá por receiveTimeoutms. Sendo assim, para ele se
manter ativo, basta que faça chamadas consecutivas a esses métodos com um
intervalo de tempo menor ou igual a receiveTimeout.
| Modifier and Type | Field and Description |
|---|---|
static long |
MAX_RECEIVE_TIMEOUT
Tempo máximo que um consumidor tem entre cada chamada ao método
receive(Serializable, IFilter) ou
peek(Serializable, IFilter) para ser considerado ativo. |
static long |
MIN_RECEIVE_TIMEOUT
Tempo mínimo que um consumidor tem entre cada chamada ao método
receive(Serializable, IFilter) ou
peek(Serializable, IFilter) para ser considerado ativo. |
| Constructor and Description |
|---|
MessageStore(java.lang.String name,
long receiveTimeout)
Construtor.
|
| Modifier and Type | Method and Description |
|---|---|
csbase.util.messages.MessageStore.Entry |
getEntry(java.util.UUID messageId)
Obtém a entrada que encapsula uma determinada mensagem.
|
java.lang.String |
getName()
Obtém o nome deste tópico.
|
Message[] |
peek(java.io.Serializable consumerId,
tecgraf.javautils.core.filter.IFilter<Message> filter)
Obtém mensagens que ainda não expiradas e não recebidas por um determinado
consumidor.
|
csbase.util.messages.MessageStore.Entry |
publish(Message message,
long timeToLive)
Adiciona uma nova mensagem a esta estrutura.
|
Message[] |
receive(java.io.Serializable consumerId,
tecgraf.javautils.core.filter.IFilter<Message> filter)
Obtém mensagens que ainda não expiradas e não recebidas por um determinado
consumidor.
|
void |
setReceiveTimeout(long timeout)
Atribui atraso na coleta de mensagens expiradas.
|
public static final long MIN_RECEIVE_TIMEOUT
receive(Serializable, IFilter) ou
peek(Serializable, IFilter) para ser considerado ativo.receiveTimeoutpublic static final long MAX_RECEIVE_TIMEOUT
receive(Serializable, IFilter) ou
peek(Serializable, IFilter) para ser considerado ativo.receiveTimeoutpublic MessageStore(java.lang.String name,
long receiveTimeout)
name - Nome deste tópico.receiveTimeout - Tempo máximo, em milisegundos, que um consumidor tem
entre cada chamada ao método receive(Serializable, IFilter)
ou peek(Serializable, IFilter) para ser considerado ativo.
O valor mínimo para este parâmetro é .public java.lang.String getName()
public void setReceiveTimeout(long timeout)
timeout - Tempo máximo, em milisegundos, que um consumidor tem entre
cada chamada ao método receive(Serializable, IFilter) ou
peek(Serializable, IFilter) para ser considerado ativo. O
valor mínimo para este parâmetro é . O
valor máximo para este parâmetro é .public csbase.util.messages.MessageStore.Entry publish(Message message, long timeToLive)
message - mensagem a ser adicionada.timeToLive - tempo de vida da mensagem em milisegundos.public Message[] receive(java.io.Serializable consumerId, tecgraf.javautils.core.filter.IFilter<Message> filter)
consumerId - Identificador do consumidor.filter - filtro utilizado para obter as mensagens que se tem
interesse.public Message[] peek(java.io.Serializable consumerId, tecgraf.javautils.core.filter.IFilter<Message> filter)
consumerId - Identificador do consumidor.filter - filtro utilizado para obter as mensagens que se tem
interesse.public csbase.util.messages.MessageStore.Entry getEntry(java.util.UUID messageId)
messageId - Identificador único da mensagem.Copyright © 2015. All Rights Reserved.