Por padrão, um intermediário descarta uma publicação
depois de enviar essa publicação a todos os assinantes interessados.
Contudo, um publicador pode especificar que ele deseja que o intermediário mantenha uma cópia de uma publicação, a qual é então
denominada uma publicação retida.
Uma cópia de uma publicação retida é enviada pelo intermediário a todos os assinantes
que registrem um interesse no tópico da publicação. Isso significa que
um novo assinante não precisa aguardar que as informações sejam publicadas novamente
para recebê-las.
Por exemplo, um assinante que registra uma assinatura para um
preço de ação receberá o preço publicado mais recentemente
imediatamente, sem ter que esperar que o preço da ação seja alterado
e publicado novamente.
Se RetainPub for especificado como uma opção de publicação na mensagem
Publish, a publicação será retida pelo intermediário e substituirá qualquer
publicação retida anteriormente para aquele tópico.
Como o intermediário retém somente uma publicação para
cada tópico e ponto de assinatura, a publicação antiga é excluída
quando uma nova publicação chega.
Ao decidir se deve utilizar
ou não as publicações retidas, considere as seguintes questões.
- Suas publicações contêm informações sobre estado ou informações
sobre eventos?
Em geral, as informações sobre eventos não são retidas, mas as
informações sobre estado são retidas.
Contudo, se todas as assinaturas de um tópico estiverem ativas antes que seja feita
qualquer publicação sobre esse tópico, e se não for esperada nenhuma assinatura nova, não
haverá necessidade de reter publicações, mesmo para informações sobre estado, porque as publicações
serão entregues a todos os assinantes assim que forem publicadas.
Publicações que contêm informações sobre estado também não precisam
ser retidas se forem publicadas com muita freqüência (por exemplo, a
cada segundo). Com esta freqüência de publicação, qualquer novo assinante (ou um assinante que recupera de uma falha) recebe o estado atual quase imediatamente após assinar.
- Deseja receber publicações apenas ao solicitá-las?
Se você utilizar publicações retidas, os assinantes poderão
registrar-se utilizando a opção PubOnReqOnly da mensagem
Registrar Assinante. Isso significa que o intermediário enviará publicações a um assinante somente quando esse
assinante pedir uma atualização.
O intermediário envia para o assinante a publicação atual retida que corresponde à assinatura.
- Publicações retidas podem ser misturadas com publicações não-retidas no mesmo tópico ?
Isto não é recomendado. Se você tiver uma publicação retida e, em
seguida, uma publicação não retida sobre o mesmo tópico for
publicada, a publicação retida existente ainda ficará retida. Ela não
será atualizada pela publicação não retida. Se um assinante se registrar utilizando a opção PubOnReqOnly
da mensagem Registrar Assinante, ele não poderá acessar nenhuma publicação não retida.O intermediário enviará somente a
publicação retida atual em resposta a um pedido de atualização.
- É possível ter mais de um aplicativo publicando publicações retidas no mesmo tópico ?
Recomenda-se não ter mais de um aplicativo publicando publicações
retidas sobre o mesmo tópico. Se isso acontecer, e as publicações
forem quase simultâneas, não é possível determinar qual das
publicações será retida.
Se os publicadores utilizarem intermediários diferentes,
poderão ser mantidas publicações retidas diferentes sobre o mesmo
tópico em cada intermediário.
- Como o aplicativo do assinante se recupera de falhas?
Se o assinante não utilizar publicações retidas, o aplicativo assinante pode ter que armazenar seu estado atual localmente.
Se o publicador utilizar publicações retidas, o assinante poderá
solicitar uma atualização para atualizar suas informações de estado
após iniciar novamente.
O intermediário continua a enviar publicações para um assinante registrado, mesmo se este assinante não estiver sendo executado.
Isso pode levar a um acúmulo de mensagens na fila do assinante. Esse acúmulo pode ser evitado se o assinante
se registrar com a opção PubOnReqOnly da mensagem Registrar Assinante.O assinante deve, então, atualizar seu estado periodicamente,
solicitando uma atualização ou utilizando uma fila dinâmica
temporária.
- Quais são as implicações de desempenho de publicações retidas ?
O intermediário precisa armazenar
publicações retidas em um banco de dados. Isso reduz o rendimento do processamento. Se as publicações foram muito grandes, uma quantidade considerável de
espaço em disco será necessária para armazenar a publicação retida de cada tópico. Em um ambiente de vários intermediários, publicações retidas são armazenadas por todos os outros intermediários conectados que possuem uma assinatura correspondente.
Utilize o campo Expiry do descritor de
mensagem (MQMD) para definir um intervalo de expiração para uma
publicação retida.
Os aplicativos de verificação de amostra que são fornecidos com o WebSphere Message Broker
incluem o serviço Soccer Results.Essa amostra utiliza publicações
retidas para registrar o placar mais recente em cada jogo de futebol
que ela estiver monitorando. O código da amostra ilustra a
programação necessária para suportar essa opção.
Nem todos os aplicativos podem publicar publicações retidas, e nem
todas as publicações retidas podem ter datas de expiração aplicadas a
elas. A tabela a seguir mostra quais aplicativos podem publicar
publicações retidas e se as publicações retidas podem ter uma data de
expiração:
|
MQ |
SCADA |
JMS/IP |
Retida |
SIM |
SIM |
NÃO |
Data de Expiração |
SIM |
NÃO |
NÃO |
As colunas da tabela indicam três tipos de aplicativos. A primeira linha indica se uma publicação pode ser uma publicação
retida e a segunda linha indica se uma data de expiração pode ser
aplicada à publicação.