Altere a sequência de mensagens recebidas do
WebSphere MQ, para que elas sejam propagadas na ordem correta
usando um número de sequência definido em uma mensagem XML.
Nesta tarefa de exemplo, a sequência é definida como iniciando no número de
sequência 0 (que é o padrão) e terminando quando ela não tiver recebido nenhuma nova mensagem no grupo por 60
segundos. O fluxo de mensagens é configurado para que as mensagens possam chegar fora de ordem mas o nó
Resequence tenta propagá-las na ordem correta. Se uma mensagem
necessária na sequência falhar em chegar por 10 segundos, o nó
Resequence ignorará a mensagem ausente e propagará a próxima
mensagem na sequência, embora ela agora esteja fora de ordem.
As etapas a seguir mostram como gravar
um fluxo de mensagens que pode receber o documento XML do
WebSphere MQ, reordenar as mensagens com base em um número de
sequência em uma mensagem XML (neste exemplo o caminho $Root/XMLNSC/Doc/SeqNo é usado) e
gravar em uma fila do WebSphere MQ:
- Crie um fluxo de mensagens chamado Resequence_Task2, contendo um nó
MQInput, um nó
Resequence e um nó
MQOutput. Para informações adicionais sobre como fazer isto, consulte Criação de um Fluxo de Mensagens.
- Conecte o terminal Out do nó MQInput
ao terminal In do nó Resequence.
- Conecte os terminais Out, Missing e Expire do nó Resequence
no terminal In do nó MQOutput.
- Configure as seguintes propriedades do nó MQInput:
- Na guia Básico, configure a propriedade Nome da
Fila como RESEQUENCE_TASK2_IN1
- Na guia Análise de Mensagem de Entrada, configure a
propriedade Domínio de Mensagem como XMLNSC.
- No nó Resequence, configure as propriedades a seguir na guia
Básico:
- Configure a propriedade Caminho para número de sequência como
$Root/XMLNSC/Doc/SeqNo
- Configure a propriedade Tempo limite da mensagem ausente como
10
- Configure a propriedade Fim de Definição de Sequência para Automático com um valor
de 60.
- No nó MQOutput, configure a propriedade
Nome da Fila (na guia Básico) como
RESEQUENCE_TASK2_OUT1.
- Salve o fluxo de mensagens.
Processamento de mensagens no fluxo de mensagens:
Esta seção descreve a maneira na
qual o nó Resequence processa as mensagens que entram no fluxo de
mensagens:
- As seguintes mensagens chegam na fila do WebSphere MQ
RESEQUENCE_TASK2_IN1:
<Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>1</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>5</SeqNo></Doc>,
<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,<Doc><SeqNo>8</SeqNo></Doc>,
- O nó Resequence primeiro recebe a mensagem com o número de
sequência 0. O nó Resequence cria um novo grupo de sequências para
gerenciar o processo de reordenação; o novo grupo de sequências é um grupo padrão porque nenhum grupo de
sequências foi definido na mensagem. A mensagem (com número de sequência 0) é a primeira na sequência,
portanto, ela é propagada para o terminal Out.
- O nó Resequence, em seguida, recebe o restante das mensagens
até, e incluindo, o número de sequência 8, e as propaga na ordem na qual elas chegaram.
Cada mensagem é armazenada antes de ser propagada e uma transação diferente é usada para propagar o
recebimento de dados das mensagens a partir do nó Resequence.
- Sessenta segundos decorrem e o grupo de sequências é fechado.
- As próximas mensagens chegam na fila do WebSphere MQ
RESEQUENCE_TASK2_IN1:
<Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,
- O nó Resequence primeiro recebe a mensagem contendo o número
de sequência 0. Neste ponto, o nó Resequence cria um novo grupo de
sequências (padrão) e propaga a mensagem com o número de sequência 0 para o terminal Out.
- A próxima mensagem contém o número de sequência 3, que está fora de sequência.
A propriedade Tempo Limite da Mensagem Ausente é configurada no nó
Resequence com um valor de 10 segundos e o cronômetro inicia.
- O número de sequência 2 chega, que ainda não é a próxima mensagem necessária, mas é menor que a mensagem
mais baixa atualmente armazenada, portanto, o cronômetro da mensagem ausente é reconfigurado.
- O nó Resequence então recebe o restante das mensagens, todos
elas possuem um número de sequência maior que 2, portanto, elas são armazenadas mas não propagadas. O
cronômetro da mensagem ausente não é reconfigurado desta vez porque cada número é posterior ao número 2 na
sequência.
- O número de sequência 1 falha em chegar durante o período especificado e, após 10 segundos, o período de
tempo limite expira.
- O nó Resequence propaga todas as mensagens que estão
armazenadas, começando com o número de sequência mais baixo (neste caso, 2) seguido por todas as outras
mensagens até o próximo número ausente na sequência (neste caso, mensagens com os números de sequência 3 e
4). As mensagens 2, 3 e 4 são propagadas para o terminal Expire.
- O nó Resequence é movido para um estado não-ordenado para este
grupo de sequências e não propagará qualquer mensagem neste grupo para o terminal Out. O nó
Resequence permanece no estado não-ordenado para este grupo de
sequências até que o grupo expire e seja fechado.
- Quando outros 10 segundos tiverem passado, o cronômetro de mensagem ausente expirará novamente e as
mensagens 6 e 7 serão propagadas para o terminal Expire.
Neste ponto, não há mais mensagens ausentes, portanto, o cronômetro de mensagem ausente não é reiniciado.
- O cronômetro de expiração do grupo é iniciado e o grupo é fechado após 60 segundos terem passado. O
cronômetro de expiração do grupo nunca é iniciado quando um cronômetro de mensagem ausente está em execução.