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. Portanto, um novo assinante não precisa aguardar que as
informações sejam publicadas novamente antes de recebê-las.
Por exemplo, um assinante que registra
uma assinatura para um preço de ação recebe o preço publicado mais recentemente imediatamente, sem precisar
aguardar a alteração ou republicação do preço da ação.
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.
No entanto, se todas as assinaturas para um tópico estiverem ativas antes de serem feitas publicações nesse
tópico, e se não forem esperadas novas assinaturas, não haverá nenhum requisito para reter publicações, mesmo
para informações de estado, porque as publicações serão entregues para todos os assinantes assim que forem
publicadas.
As publicações que contêm informações de estado talvez não precisem ficar retidas, se forem publicadas com
muita frequê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. Portanto, o intermediário envia publicações
para um assinante apenas quando esse assinante solicita uma atualização. O intermediário então envia a
publicação retida atual para o assinante que corresponde à assinatura.
- Publicações retidas podem ser misturadas com publicações não-retidas no mesmo tópico ?
Esta opção não é recomendada. 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 registrar-se utilizando a opção
PubOnReqOnly da mensagem Registrar Assinante, ele não poderá acessar nenhuma das
publicações não retidas. 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 ?
É recomendável ter mais de um aplicativo publicando publicações retidas no 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.
Esta opção pode levar a um acúmulo de mensagens na fila de assinantes. 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. Esta opção reduz o rendimento
de processamento. Se as publicações forem muito grandes, será necessária uma grande quantidade de espaço em
disco para armazenar a publicação retida de cada tópico. Em um ambiente de vários intermediários, as
publicações retidas são armazenadas por todos os demais 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 e amostra que são incluídos
com o
WebSphere Event
Broker incluem a seguinte amostra:
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.
Você
pode visualizar amostras apenas quando utilizar o centro de informações integrado
ao Message
Brokers Toolkit.
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.